Odstraňování prvků ze seznamu (pole) v jazyce Python: clear(), pop(), remove(), del

Podnikání

Chcete-li v jazyce Python odebrat prvek ze seznamu (pole) typu list, použijte metody clear(), pop() a remove(). Můžete také určit pozici a rozsah seznamu pomocí indexu nebo slice a poté jej odstranit pomocí příkazu del.

Zde jsou uvedeny následující informace.

  • Odstranění všech prvků:clear()
  • Odstranění prvku na zadané pozici a získání jeho hodnoty.:pop()
  • Vyhledá prvky se zadanou hodnotou a odstraní první prvek.:remove()
  • Odstranění zadáním pozice a rozsahu v indexovém řezu:del
  • Dávkové odstranění více prvků, které splňují daná kritéria.:indikace zařazení do seznamu

Všimněte si, že seznamy mohou uchovávat data různých typů a striktně se liší od polí. Pokud chcete pracovat s poli pro procesy, které vyžadují velikost paměti nebo její adresu, nebo pro numerické výpočty rozsáhlých dat, použijte pole (standardní knihovna) nebo NumPy.

Odstranění všech prvků: clear()

V metodě clear() se odstraní všechny prvky seznamu, takže vznikne prázdný seznam.

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

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

Odstranění prvku na zadané pozici a získání jeho hodnoty.: pop()

Metodu pop() seznamu lze použít k odstranění prvku na zadané pozici a získání hodnoty tohoto prvku.

První (počáteční) číslo je 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]

Pro zadání pozice od konce (poslední) lze použít také zápornou hodnotu. Konec (poslední) je -1.

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

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

Pokud je argument vynechán a není zadána žádná pozice, odstraní se prvek na konci (poslední).

print(l.pop())
# 9

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

Zadání neexistující pozice bude mít za následek chybu.

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

Všimněte si, že operace pop(0), která odstraní první prvek, vyžaduje následující náklady a není efektivní. Výpočetní složitost různých operací se seznamy najdete na následující stránce na oficiální wiki.
O(n)

O(1)Typ deque je k dispozici v modulu kolekcí standardní knihovny jako typ, který za tuto cenu maže prvky na vrcholu. Pokud například chcete s daty zacházet jako s frontou (FIFO), je efektivnější použít deque.

Vyhledá prvky se zadanou hodnotou a odstraní první prvek.: remove()

Metodu remove() lze použít k vyhledání prvků se stejnou hodnotou, jaká byla zadána, a k odstranění prvního prvku.

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

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

Pokud seznam obsahuje více než jeden prvek, který odpovídá zadané hodnotě, bude odstraněn pouze první z nich.

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

Pokud je zadána neexistující hodnota, dojde k chybě.

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

Odstranění zadáním pozice a rozsahu v indexovém řezu: del

K odstranění prvků ze seznamu můžete použít také příkaz del.

Zadejte prvek, který má být odstraněn, pomocí jeho indexu. První (počáteční) index je 0 a poslední (konečný) index je -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]

Pokud zadáte rozsah s plátky, můžete odstranit více prvků najednou.

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]

Je také možné zadat celý rozsah a odstranit všechny prvky.

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

[start:stop:step]Pokud tímto způsobem zadáte rozsah v řezu a určíte přírůstkový krok, můžete odstranit více skákajících prvků najednou.

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]

Další informace o krájení naleznete v následujícím článku.

Dávkové odstranění více prvků, které splňují daná kritéria.: indikace zařazení do seznamu

Proces odstraňování prvků, které splňují podmínky, je ekvivalentní procesu ponechání (vyjmutí) prvků, které podmínky nesplňují. Pro tento druh zpracování se používá notace pro porozumění seznamu.

Příklad odstranění sudých nebo lichých prvků (= ponechání sudých nebo lichých prvků) je uveden níže.
%Jedná se o operátor zbytku.
i % 2
Jedná se o zbytek čísla i dělený dvěma.

V notaci pro porozumění seznamu se vytvoří nový seznam. Na rozdíl od dosud představených metod typu seznam zůstává původní seznam nezměněn.

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]

Další příklady. V závislosti na podmíněném výrazu je možné různé zpracování.

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']

Pokud chcete odstranit duplicitní prvky, použijte typ set set.

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