Elemek eltávolítása egy listából (tömbből) Pythonban: clear(), pop(), remove(), del

Üzleti

Egy elem eltávolításához egy list típusú listából (tömbből) Pythonban a listamódszerek clear(), pop() és remove() segítségével. A lista pozícióját és tartományát az index vagy a slice segítségével is megadhatjuk, majd a del utasítással törölhetjük.

A következő információk itt találhatók.

  • Minden elem eltávolítása:clear()
  • Töröl egy elemet a megadott pozícióból, és megkapja az értékét.:pop()
  • A megadott értékkel rendelkező elemeket keresi, és eltávolítja az első elemet.:remove()
  • Törlés a pozíció és a tartomány megadásával az indexszeletekben:del
  • Több, a feltételeknek megfelelő elem kötegelt törlése.:lista felvételének jelzése

Vegyük észre, 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. Használja a tömb (standard könyvtár) vagy a NumPy-t, ha tömböket akar kezelni olyan folyamatokhoz, amelyek memóriaméretet vagy memóriacímet igényelnek, vagy nagyméretű adatok numerikus számításához.

Minden elem eltávolítása: clear()

A lista clear() metódusában az összes elemet eltávolítjuk, így egy üres listát kapunk.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

Töröl egy elemet a megadott pozícióból, és megkapja az értékét.: pop()

A lista pop() metódusával törölhetünk egy elemet egy megadott pozícióból, és megkaphatjuk az adott elem értékét.

Az első (kezdeti) szám a 0.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

Negatív értékkel is megadható a végponttól (utolsó) számított pozíció. A vég (utolsó) értéke -1.

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

Ha az argumentum kimarad, és nincs megadva pozíció, akkor az utolsó (utolsó) elem törlődik.

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

Nem létező pozíció megadása hibát eredményez.

# print(l.pop(100))
# IndexError: pop index out of range

Vegyük észre, hogy a pop(0), amely az első elemet távolítja el, a következő költséget igényli, és nem hatékony művelet. A listákon végzett különböző műveletek számítási komplexitásáról lásd a hivatalos wiki következő oldalát.
O(n)

O(1)A deque típust a szabványos könyvtár collections modulja biztosítja, mint olyan típust, amely ilyen költséggel törli az elemeket a tetejére. Ha például az adatokat sorbanállásként (FIFO) szeretnénk kezelni, akkor hatékonyabb a deque használata.

A megadott értékkel rendelkező elemeket keresi, és eltávolítja az első elemet.: remove()

A remove() listamódszerrel kereshetünk olyan elemeket, amelyek értéke megegyezik a megadott értékkel, és eltávolíthatjuk az első elemet.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

Ha a lista egynél több olyan elemet tartalmaz, amely megfelel a megadott értéknek, csak az elsőt távolítja el.

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

Ha nem létező érték van megadva, hiba lép fel.

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

Törlés a pozíció és a tartomány megadásával az indexszeletekben: del

A del utasítással is eltávolíthat elemeket a listából.

Adja meg a törlendő elemet az indexe alapján. Az első (kezdeti) index 0, az utolsó (végső) index pedig -1.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

Ha egy tartományt szeletekkel ad meg, egyszerre több elemet is törölhet.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

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

Lehetőség van a teljes tartomány megadására és az összes elem törlésére is.

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]Ha így adja meg a tartományt a szeletben, és inkrementális lépést határoz meg, egyszerre több ugró elemet is törölhet.

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

A szeleteléssel kapcsolatos további információkért lásd a következő cikket.

Több, a feltételeknek megfelelő elem kötegelt törlése.: lista felvételének jelzése

A feltételeknek megfelelő elemek eltávolításának folyamata egyenértékű a feltételeknek nem megfelelő elemek elhagyásának (kivonásának) folyamatával. Az ilyen típusú feldolgozásra a listamegértés jelölést használjuk.

Az alábbiakban egy példa látható a páratlan vagy páros elemek eltávolítására (= páros vagy páratlan elemek meghagyása).
%Ez a maradék operátor.
i % 2
Ez az i maradéka osztva 2-vel.

A listamegértés jelölésben egy új lista jön létre. Az eddig bemutatott listatípusú módszerekkel ellentétben az eredeti lista változatlan marad.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

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

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Egyéb példák. A feltételes kifejezéstől függően többféle feldolgozás lehetséges.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

Ha a duplikált elemeket szeretné eltávolítani, használja a set set set típust.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']