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()
- 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
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.
- Související články:Použití notace seznamů v jazyce Python
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']