Python listák (tömbök) egyes elemeinek kivonása, helyettesítése és átalakítása

Üzleti

Egy új lista létrehozásához Pythonban egy meglévő lista (tömb) csak azon elemeinek kivonásával vagy törlésével, amelyek megfelelnek bizonyos feltételeknek, vagy cserék vagy átalakítások elvégzésével, használjuk a listafelfogásokat.

A következőket itt magyarázzuk el, mintakóddal együtt.

  • A lista megértésének alapformája
  • Alkalmazza a folyamatot a lista összes elemére
  • A kritériumoknak megfelelő elemek kivonása és törlése a listából
  • A lista feltételeinek megfelelő elemek cseréje vagy átalakítása.

A karakterláncok listáira vonatkozó konkrét példákat lásd a következő cikkben.

Lehetőség van olyan elemek véletlenszerű kivonására is, amelyek nem felelnek meg a kritériumoknak.

Vegye figyelembe, hogy a listák különböző típusú adatokat tárolhatnak, és szigorúan különböznek a tömböktől. Ha olyan folyamatokban szeretnénk tömböket kezelni, amelyek memóriaméretet és memóriacímeket vagy nagyméretű adatok numerikus feldolgozását igénylik, használjuk a array (standard könyvtár) vagy a NumPy programot.

A következő lista egy példa

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

A lista megértésének alapformája

Amikor egy listából új listát generálunk, a listakövetelmények egyszerűbben írhatók, mint a for ciklusok.

[expression for any variable name in iterable object if conditional expression]

A kifejezés egy olyan elemre vonatkozik, amely kielégíti egy iterálható objektum (például egy lista vagy egy tuple) feltételes kifejezését, és egy új lista elemévé válik. A “ha feltételes kifejezés” elhagyható, ebben az esetben a kifejezés minden elemre vonatkozik.

További részletekért lásd a következő cikket, beleértve a beágyazott listák megértésének jelölését.

Alkalmazza a folyamatot a lista összes elemére

Ha például egy lista összes elemére szeretne valamilyen feldolgozást alkalmazni, írja le a kívánt feldolgozást a fenti listamegértési kifejezésben.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Ez használható a számok és a karakterláncok listái közötti konvertálásra.

A kritériumoknak megfelelő elemek kivonása és törlése a listából

Ha az elemet csak feltételes kifejezéssel kell kiválasztani, akkor azt nem dolgozza fel egy kifejezés, így az a következő formát veszi fel

[variable name for variable name in original list if conditional expression]

Egy új lista generálódik, amelyből csak a feltételnek megfelelő elemek (olyan elemek, amelyekre a feltételes kifejezés igaz) kerülnek kivonásra.

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Ha a “ha feltételes kifejezés” értéke “ha nem feltételes kifejezés”, akkor a feltétel negációvá válik, és csak azok az elemek választhatók ki és vonhatók ki, amelyek nem felelnek meg a feltételnek (olyan elemek, amelyek esetében a feltételes kifejezés hamis). Más szóval, egy új lista jön létre, amelyből a feltételnek megfelelő elemek eltávolításra kerülnek.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Természetesen ugyanezt az eredményt kapjuk az egyenértékű feltételes kifejezés megadásával a not használata nélkül is.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

A feltételes kifejezés része több feltétel is lehet. Negatív nemek is használhatók.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

A lista feltételeinek megfelelő elemek cseréje vagy átalakítása.

A fenti elemkivonási példában a feltételeknek nem megfelelő elemeket eltávolítottuk.

Ha csak a feltételeknek megfelelő elemeken szeretnénk helyettesítést, átalakítást stb. végrehajtani, akkor a listamegértési jelölés kifejezésrészére alkalmazzuk a terner operátort.

Pythonban a terner operátor a következőképpen írható le

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Ez egy kicsit bonyolult, de a listamegértési jelölés és a terner operátorok kombinációja a következő.

[True Value if Conditional Expression else False Value for any variable name in original list]

A zárójelbe zárt rész a terner operátor (a zárójelek nem szükségesek a tényleges kódban).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Ha bármely változó neve igaz vagy hamis értékek esetén úgy van írva, ahogy van, akkor az eredeti elem értéke úgy van használva, ahogy van. Ha egy kifejezés van leírva, akkor a kifejezés feldolgozása kerül alkalmazásra.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
Copied title and URL