Odstraňovanie prvkov zo zoznamu (poľa) v jazyku Python: clear(), pop(), remove(), del

obchodné

Ak chcete odstrániť prvok zo zoznamu (poľa) typu list v jazyku Python, použite metódy clear(), pop() a remove(). Môžete tiež určiť pozíciu a rozsah zoznamu pomocou index alebo slice a potom ho odstrániť pomocou príkazu del.

Tu sú uvedené tieto informácie.

  • Odstránenie všetkých prvkov:clear()
  • Odstránenie prvku na zadanej pozícii a získanie jeho hodnoty.:pop()
  • Vyhľadá prvky so zadanou hodnotou a odstráni prvý prvok.:remove()
  • Odstránenie zadaním pozície a rozsahu v indexovom reze:del
  • Dávkové odstránenie viacerých prvkov, ktoré spĺňajú kritériá.:indikácia zaradenia do zoznamu

Všimnite si, že zoznamy môžu uchovávať údaje rôznych typov a striktne sa líšia od polí. Používajte pole (štandardná knižnica) alebo NumPy, keď chcete pracovať s poliami pre procesy, ktoré vyžadujú veľkosť pamäte alebo adresu pamäte, alebo pre numerické výpočty rozsiahlych údajov.

Odstránenie všetkých prvkov: clear()

V metóde clear() sa odstránia všetky prvky zoznamu, čím vznikne prázdny zoznam.

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

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

Odstránenie prvku na zadanej pozícii a získanie jeho hodnoty.: pop()

Metódu pop() zoznamu možno použiť na odstránenie prvku na zadanej pozícii a získanie hodnoty tohto prvku.

Prvé (počiatoč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]

Na určenie pozície od konca (poslednej) možno použiť aj zápornú hodnotu. Koniec (posledný) je -1.

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

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

Ak je argument vynechaný a nie je zadaná žiadna pozícia, vymaže sa prvok na konci (posledný).

print(l.pop())
# 9

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

Zadanie neexistujúcej pozície bude mať za následok chybu.

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

Všimnite si, že operácia pop(0), ktorá odstráni prvý prvok, vyžaduje nasledujúce náklady a nie je efektívna. Výpočtovú zložitosť rôznych operácií so zoznamami nájdete na nasledujúcej stránke na oficiálnej wiki.
O(n)

O(1)Typ deque je k dispozícii v module kolekcií štandardnej knižnice ako typ, ktorý za túto cenu odstraňuje prvky na vrchole. Ak chcete napríklad s údajmi zaobchádzať ako s frontom (FIFO), je efektívnejšie použiť deque.

Vyhľadá prvky so zadanou hodnotou a odstráni prvý prvok.: remove()

Metódu remove() zoznamu možno použiť na vyhľadanie prvkov s rovnakou hodnotou, aká bola zadaná, a na odstránenie prvého prvku.

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

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

Ak zoznam obsahuje viac ako jeden prvok, ktorý zodpovedá zadanej hodnote, odstráni sa len prvý z nich.

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

Ak je zadaná neexistujúca hodnota, nastane chyba.

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

Odstránenie zadaním pozície a rozsahu v indexovom reze: del

Na odstránenie prvkov zo zoznamu môžete použiť aj príkaz del.

Zadajte prvok, ktorý sa má odstrániť, podľa jeho indexu. Prvý (počiatoč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]

Ak zadáte rozsah s plátkami, môžete vymazať viacero prvkov naraz.

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 tiež možné zadať celý rozsah a vymazať všetky prvky.

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

[start:stop:step]Ak takto zadáte rozsah v reze a určíte prírastkový krok, môžete naraz vymazať viacero skákajúcich prvkov.

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]

Ďalšie informácie o krájaní nájdete v nasledujúcom článku.

Dávkové odstránenie viacerých prvkov, ktoré spĺňajú kritériá.: indikácia zaradenia do zoznamu

Proces odstraňovania prvkov, ktoré spĺňajú podmienky, je ekvivalentný procesu ponechania (extrakcie) prvkov, ktoré podmienky nespĺňajú. Na tento druh spracovania sa používa notácia porozumenia zoznamu.

Príklad odstránenia nepárnych alebo párnych prvkov (= ponechanie párnych alebo nepárnych prvkov) je uvedený nižšie.
%Toto je operátor zvyšku.
i % 2
Je to zvyšok i delený 2.

V zápise porozumenia zoznamu sa vytvorí nový zoznam. Na rozdiel od doteraz predstavených metód typu zoznam zostáva pôvodný zoznam nezmenený.

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]

Ďalšie príklady. V závislosti od podmieneného výrazu je možné rôzne spracovanie.

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

Ak chcete odstrániť duplicitné prvky, použite typ set set.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']
Copied title and URL