Usuwanie elementów z listy (tablicy) w Pythonie: clear(), pop(), remove(), del

Biznes

Aby usunąć element z listy (tablicy) typu list w Pythonie, należy użyć metod listowych clear(), pop() i remove(). Możesz również określić pozycję i zakres listy za pomocą index lub slice, a następnie usunąć ją za pomocą instrukcji del.

Podane są tu następujące informacje.

  • Usuń wszystkie elementy:clear()
  • Usuwa element na podanej pozycji i pobiera jego wartość.:pop()
  • Wyszukuje elementy z podaną wartością i usuwa pierwszy element.:remove()
  • Usuwanie przez określenie pozycji i zakresu w wycinku indeksu:del
  • Wyczerpujące usuwanie wielu elementów, które spełniają kryteria.:wykaz wskazań włączenia

Zauważ, że listy mogą przechowywać dane różnych typów i są ściśle różne od tablic. Użyj array (biblioteka standardowa) lub NumPy, gdy chcesz obsługiwać tablice dla procesów, które wymagają rozmiaru pamięci lub adresu pamięci, lub dla obliczeń numerycznych danych o dużej skali.

Usuń wszystkie elementy: clear()

W metodzie listowej clear(), wszystkie elementy są usuwane, w wyniku czego otrzymujemy pustą listę.

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

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

Usuwa element na podanej pozycji i pobiera jego wartość.: pop()

Metoda pop() listy może być użyta do usunięcia elementu na określonej pozycji i uzyskania wartości tego elementu.

Pierwszą (początkową) liczbą jest 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]

Do określenia pozycji od końca (ostatniej) można również użyć wartości ujemnej. Koniec (last) wynosi -1.

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

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

Jeśli argument jest pominięty i nie podano pozycji, to usuwany jest element znajdujący się na końcu (ostatni).

print(l.pop())
# 9

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

Podanie nieistniejącej pozycji spowoduje wystąpienie błędu.

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

Zauważ, że pop(0), który usuwa pierwszy element, wymaga następującego kosztu i nie jest wydajną operacją. Zobacz następującą stronę na oficjalnym wiki, aby dowiedzieć się o złożoności obliczeniowej różnych operacji na listach.
O(n)

O(1)Typ deque jest dostarczany w module kolekcji biblioteki standardowej jako typ, który usuwa elementy na wierzch po tym koszcie. Na przykład, jeśli chcesz traktować dane jako kolejkę (FIFO), bardziej efektywne jest użycie deque.

Wyszukuje elementy z podaną wartością i usuwa pierwszy element.: remove()

Metoda listowa remove() może być użyta do wyszukania elementów o takiej samej wartości jak podana i usunięcia pierwszego elementu.

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

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

Jeśli lista zawiera więcej niż jeden element pasujący do podanej wartości, tylko pierwszy z nich zostanie usunięty.

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

Jeżeli zostanie podana nieistniejąca wartość, to wystąpi błąd.

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

Usuwanie przez określenie pozycji i zakresu w wycinku indeksu: del

Możesz również użyć instrukcji del, aby usunąć elementy z listy.

Określa element, który ma zostać usunięty poprzez jego indeks. Pierwszym (początkowym) indeksem jest 0, a ostatnim (końcowym) indeksem jest -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]

Jeśli określisz zakres za pomocą plasterków, możesz usunąć wiele elementów jednocześnie.

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]

Możliwe jest również określenie całego zakresu i usunięcie wszystkich elementów.

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

[start:stop:step]Jeśli określisz zakres w wycinku w ten sposób i określisz krok przyrostowy, możesz usunąć wiele elementów przeskakujących jednocześnie.

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]

Aby uzyskać więcej informacji na temat krojenia, zobacz poniższy artykuł.

Wyczerpujące usuwanie wielu elementów, które spełniają kryteria.: wykaz wskazań włączenia

Proces usuwania elementów spełniających warunki jest równoważny procesowi pozostawiania (wyodrębniania) elementów niespełniających warunków. Do tego rodzaju przetwarzania stosuje się notację list comprehension.

Przykład usuwania elementów nieparzystych lub parzystych (= pozostawiania elementów parzystych lub nieparzystych) jest pokazany poniżej.
%Jest to operator reszt.
i % 2
Jest to reszta z liczby i podzielona przez 2.

W notacji list comprehension, tworzona jest nowa lista. W przeciwieństwie do metod typu listowego wprowadzonych do tej pory, oryginalna lista pozostaje niezmieniona.

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]

Inne przykłady. W zależności od wyrażenia warunkowego możliwe jest różnorodne przetwarzanie.

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

Jeśli chcesz usunąć zduplikowane elementy, użyj typu set.

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