Uklanjanje elemenata s popisa (niza) u Pythonu: clear(), pop(), remove(), del

Poslovanje

Da biste uklonili element s popisa (niza) popisa vrsta u Pythonu, koristite metode popisa clear(), pop() i remove(). Također možete odrediti položaj i raspon popisa pomoću indeksa ili slice-a, a zatim ga izbrisati pomoću naredbe del.

Ovdje su navedene sljedeće informacije.

  • Uklonite sve elemente:clear()
  • Izbrišite element na navedenoj poziciji i dohvatite njegovu vrijednost.:pop()
  • Traži elemente s navedenom vrijednošću i uklanja prvi element.:remove()
  • Brisanje navođenjem položaja i raspona u indeksnom rezu:del
  • Skupno brisanje više elemenata koji zadovoljavaju kriterije.:indikacija za uključivanje popisa

Imajte na umu da popisi mogu pohranjivati ​​podatke različitih tipova i striktno se razlikuju od nizova. Koristite polje (standardna biblioteka) ili NumPy kada želite rukovati nizovima za procese koji zahtijevaju veličinu memorije ili memorijsku adresu ili za numeričko izračunavanje velikih podataka.

Uklonite sve elemente:clear()

U metodi liste clear(), svi elementi se uklanjaju, što rezultira praznim popisom.

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

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

Izbrišite element na navedenoj poziciji i dohvatite njegovu vrijednost.:pop()

Metoda pop() popisa može se koristiti za brisanje elementa na određenoj poziciji i dobivanje vrijednosti tog elementa.

Prvi (početni) broj 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]

Negativna vrijednost se također može koristiti za određivanje pozicije s kraja (posljednje). Kraj (posljednji) je -1.

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

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

Ako je argument izostavljen, a pozicija nije navedena, element na kraju (posljednji) se briše.

print(l.pop())
# 9

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

Određivanje nepostojeće pozicije rezultirat će pogreškom.

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

Imajte na umu da pop(0), koji uklanja prvi element, zahtijeva sljedeće troškove i nije učinkovita operacija. Pogledajte sljedeću stranicu na službenom wikiju za računsku složenost različitih operacija na listama.
O(n)

O(1)Deque tip je osiguran u modulu zbirki standardnih knjižnica kao tip koji briše elemente na vrh po ovoj cijeni. Na primjer, ako želite podatke tretirati kao red čekanja (FIFO), učinkovitije je koristiti deque.

Traži elemente s navedenom vrijednošću i uklanja prvi element.:remove()

Metoda liste remove() može se koristiti za traženje elemenata s istom vrijednošću kao što je navedeno i uklanjanje prvog elementa.

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

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

Ako popis sadrži više od jednog elementa koji odgovara navedenoj vrijednosti, samo će prvi biti uklonjen.

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

Ako je navedena nepostojeća vrijednost, dolazi do pogreške.

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

Brisanje navođenjem položaja i raspona u indeksnom rezu:del

Također možete koristiti del naredbu za uklanjanje elemenata s popisa.

Navedite element koji će se izbrisati prema njegovom indeksu. Prvi (početni) indeks je 0, a posljednji (konačni) indeks 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]

Ako navedete raspon s kriškama, možete izbrisati više elemenata odjednom.

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]

Također je moguće odrediti cijeli raspon i izbrisati sve elemente.

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

[start:stop:step]Ako na ovaj način odredite raspon u isječku i navedete inkrementalni korak, možete izbrisati više elemenata za preskakanje odjednom.

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]

Za više informacija o rezanju pogledajte sljedeći članak.

Skupno brisanje više elemenata koji zadovoljavaju kriterije.:indikacija za uključivanje popisa

Proces uklanjanja elemenata koji zadovoljavaju uvjete je ekvivalentan procesu napuštanja (vađenja) elemenata koji ne zadovoljavaju uvjete. Za ovu vrstu obrade koristi se zapis razumijevanja popisa.

Primjer uklanjanja neparnih ili parnih elemenata (= ostavljanje parnih ili neparnih elemenata) prikazan je u nastavku.
%Ovo je operator ostatka.
i % 2
Ovo je ostatak od i podijeljen s 2.

U zapisu za razumijevanje popisa kreira se novi popis. Za razliku od dosad uvedenih metoda tipa popisa, izvorni popis ostaje nepromijenjen.

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]

Drugi primjeri. Moguća je raznovrsna obrada ovisno o uvjetnom izrazu.

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

Ako želite ukloniti duple elemente, upotrijebite vrstu skupa.

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