Jak usunąć elementy z list w Pythonie
Usuwanie elementów z listy Python jest powszechnym zadaniem, które można wykonać za pomocą różnych technik. Niezależnie od tego, czy musisz usunąć element po jego pozycji, czy o wartości, Python ma cię objęty. W tym samouczku zbadasz różne podejścia do usuwania elementów z listy, w tym za pomocą .pop()
, instrukcji del
i .Remove()
.
Metoda .POP()
może usunąć element przez jego indeks i zwrócić go. Instrukcja del
oferuje inny sposób usunięcia elementów według indeksu, a także można je użyć do usuwania plasterków listy. Wybrane podejście będzie zależeć od twoich konkretnych potrzeb.
Pod koniec tego samouczka zrozumiesz, że:
- Aby usunąć element z listy w Python, możesz użyć różnych podejść, takich jak
.pop()
,del ,.Remove()
i.clear()
. - Aby usunąć elementy z określonej pozycji na liście, użyjesz metody
.pop()
. - Aby usunąć elementy i wycinki z listy w Pythonie, użyj instrukcji
del
. - Używasz metody
.Remove() do usuwania pierwszego występowania określonej wartości z listy. - Aby usunąć wszystkie pozycje z listy, użyj funkcji
.clear()
. - Możesz także usunąć zduplikowane elementy za pomocą pętli, słownika lub zestawu.
Aby w pełni wykorzystać ten samouczek, powinieneś znać podstawowe tematy dotyczące list
języka Python, takie jak tworzenie list, dodawanie elementów do listy i uzyskiwanie dostępu do elementów na liście.
Jak usunąć określone elementy z listy
Jedną z powszechnych operacji, którą wykonasz na liście Python
Aby zilustrować, w jaki sposób możesz wykonać to zadanie, załóżmy, że tworzysz stronę internetową biblioteki publicznej. Twoja aplikacja internetowa pozwoli użytkownikom zapisać listę książek, które chcieliby przeczytać. Powinno to również pozwolić na edytowanie i usuwanie książek z listy, a także sortować listę.
Możesz użyć listy Python do przechowywania listy czytania użytkownika jako zbioru tytułów książek. Na przykład lista czytania może wyglądać mniej więcej tak:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
Teraz, gdy masz już listę książek, możesz usunąć z listy pojedynczą, konkretną książkę na kilka sposobów. Jednym z podejść jest użycie metody .pop()
.
Usuwanie elementów za pomocą metody .pop()
Czasami może być konieczne usunięcie elementów z określonej pozycji na liście. Na przykład w aplikacji biblioteki publicznej użytkownicy mogą wybierać książki do usunięcia, zaznaczając pola wyboru w interfejsie użytkownika. Twoja aplikacja usunie każdy wybrany element na podstawie jego indeksu, czyli pozycji elementu na liście.
Jeśli znasz indeks elementu, który chcesz usunąć, możesz użyć metody .pop()
. Ta metoda przyjmuje indeks elementu jako opcjonalny argument, a następnie usuwa i zwraca element o tym indeksie. Jeśli do wywołania metody nie przekażesz argumentu indeksu, wówczas funkcja .pop()
usunie i zwróci ostatnią pozycję na liście.
Należy pamiętać, że listy Python używają indeksowania opartego na zero do pozycjonowania, co oznacza, że pierwszy element na liście znajduje się w indeksie 0, drugi element jest w indeksie 1 i tak dalej. Mając to na uwadze, oto przykład, w jaki sposób możesz użyć
>>> books.pop(0)
'Dragonsbane'
Wywołujesz metodę .pop()
na liście books
z indeksem 0
, wskazującym pierwszy element na liście. To wywołanie usuwa pierwszy tytuł, Dragonsbane, z listy, a następnie go zwraca.
Jeśli po uruchomieniu tego kodu sprawdzisz zawartość swojej listy, zauważysz, że DragonsBane już nie ma:
>>> books
['The Hobbit', 'Wonder', 'Jaws']
Tutaj ponownie wyświetlasz listę książek po wywołaniu .pop()
. Możesz zobaczyć, że Twoja lista jest teraz o jeden element krótsza, ponieważ .pop()
usunął pierwszy tytuł.
Jak dowiedziałeś się wcześniej w samouczku, .pop()
usuwa element, a także zwraca jego wartość, którą można następnie użyć do innych operacji. Załóżmy na przykład, że aplikacja biblioteczna pozwala również użytkownikom przechowywać osobną listę książek, które przeczytały. Po przeczytaniu książki może usunąć ją z początkowej listy książek i przenieść tytuł na listę odczytu:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> read_books = []
>>> read = books.pop(0)
>>> read_books.append(read)
>>> read_books
['Dragonsbane']
>>> books
['The Hobbit', 'Wonder', 'Jaws']
W drugim wierszu w przykładzie tworzysz nową, pustą listę o nazwie read_books
, aby przechowywać nazwy książek, które przeczytał użytkownik. Następnie używasz metody .pop()
, aby usunąć pierwszy tytuł z oryginalnej listy książek i przechowywać ją w zmiennej. Następnie używasz
Kiedy sprawdzisz zawartość obu list, zobaczysz, że lista przeczytanych zawiera teraz pierwszy usunięty tytuł, a oryginalna lista książek nie zawiera już tego tytułu.
Jeśli wywołasz metodę .pop()
na pustej liście, metoda zgłosi wyjątek IndexError
:
>>> books.pop()
'Jaws'
>>> books.pop()
'Wonder'
>>> books.pop()
'The Hobbit'
>>> books.pop()
Traceback (most recent call last):
...
IndexError: pop from empty list
W tym przykładzie wielokrotnie wywołujesz funkcję .pop()
na swojej liście, usuwając każdy tytuł z listy. Twoje ostatnie wywołanie .pop()
skutkuje wyjątkiem IndexError
, ponieważ wywołujesz metodę z pustej listy.
Uwaga: Przypomnijmy, że wywołanie .pop()
bez żadnych argumentów usuwa i zwraca ostatni element na liście.
Metoda .pop()
podniesie również indexerror
, jeśli nazwiesz ją z argumentem indeksu, który jest większy niż rozmiar listy minus jeden:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(50)
Traceback (most recent call last):
...
IndexError: pop index out of range
W tym fragmencie kodu wywołujesz funkcję .pop()
na oryginalnej liście książek, która zawiera tylko cztery elementy. Użyłeś metody .pop()
dla elementu o indeksie 50, ale jest ona poza zakresem, ponieważ lista nie jest zbyt duża, więc zgłasza IndexError
.
Użycie indeksu ujemnego jako argumentu funkcji .pop()
umożliwia usuwanie elementów listy od prawej do lewej, zamiast zaczynać od początku listy. Na przykład indeks -1 umożliwia dostęp do ostatniego elementu na liście, indeks -2 umożliwia dostęp do przedostatniego elementu i tak dalej. Zgodnie z tym wzorcem books[-len(books)]
jest indeksem ujemnym, który zwraca pierwszy element.
Poniższy przykład pokazuje, jak użyć indeksu ujemnego z funkcją .pop()
w celu usunięcia ostatniej pozycji z listy:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(-1)
'Jaws'
>>> books
['Dragonsbane', 'The Hobbit', 'Wonder']
Wywołujesz .pop()
na liście, używając -1
jako argumentu. Indeks ten usuwa z listy ostatni tytuł, Szczęki. Kiedy ponownie sprawdzisz zawartość listy, zobaczysz, że ostatnia pozycja została usunięta. Aby uzyskać ten sam efekt, można również wywołać funkcję books.pop()
bez argumentu.
Usuwanie elementów za pomocą instrukcji del
Możesz także usunąć elementy z określonego indeksu za pomocą instrukcji del
. Podobnie jak metoda .pop()
, del
usuwa element z podanej pozycji, ale nie zwraca wartości.
Aby to zilustrować, załóżmy, że użytkownik Twojej aplikacji biblioteki publicznej przypadkowo dwukrotnie dodał kilka książek do listy. Poniższy przykład pokazuje, jak prawidłowo użyć del
do usunięcia zduplikowanych tytułów książek:
>>> >>> books = [
... "Dragonsbane",
... "The Hobbit",
... "Wonder",
... "Wonder",
... "Jaws",
... "Jaws",
... ]
>>> del books[2]
>>> books
['Dragonsbane', 'The Hobbit', 'Wonder', 'Jaws', 'Jaws']
W podświetlonym wierszu najpierw napisz słowo kluczowe del
, a następnie nazwa zmiennej listy, a następnie żądany indeks w nawiasach kwadratowych.
Podobnie jak w przypadku metody .POP()
, możesz również użyć negatywnych wartości indeksu z instrukcją del
, aby usunąć elementy z końca listy:
>>> del books[-1]
Usuwasz ostatnią pozycję na liście za pomocą instrukcji del
, ale nie zwraca ona wartości. Jeśli z jakiegoś powodu musisz zapisać usuniętą wartość, użyj zamiast tego metody .pop()
.
Podobnie jak w przypadku metody .pop()
, przy próbie użycia del
na liście z nieprawidłowym indeksem pojawi się wyjątek IndexError
:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[100]
Traceback (most recent call last):
...
IndexError: list assignment index out of range
Lista książek zawiera tylko cztery pozycje, ale próbujesz wykonać del
na liście, używając indeksu 100
. Ten indeks jest poza zakresem, ponieważ na pozycji 100
nie ma elementu.
W przeciwieństwie do del
. Jeśli tego nie zrobisz, program podniesie SkładniaSerorror
:
>>> del books[]
File "<input>", line 1
del books[]
^
SyntaxError: invalid syntax
Wykonujesz instrukcję del
bez indeksu, co skutkuje wyjątkiem SyntaxError
, ponieważ operator indeksowania wymaga indeksu docelowego. Ta instrukcja nie usuwa ostatniej pozycji na liście, tak jak robi to wywołanie .pop()
bez argumentu.
Usuwanie elementów według wartości za pomocą metody .REMOVE()
Załóżmy, że aplikacja listy książek udostępnia pole tekstowe, w którym użytkownicy mogą wprowadzić tytuł do usunięcia z listy.
Jeśli chcesz usunąć element z listy według jego wartości, a nie według jego indeksu, możesz użyć metody
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Hobbit")
>>> books
['Dragonsbane', 'Wonder', 'Jaws']
W drugiej linii tego przykładu wywołujesz .remove()
, aby usunąć Hobbit z listy książek. Po wyświetleniu zaktualizowanej listy zobaczysz, że Hobbit został pomyślnie usunięty.
Jeśli wywołasz .Remove()
z wartością, której nie ma na liście, metoda podniesie wyjątek Valueerror
, jak pokazano w następującym kodzie:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Two Towers")
Traceback (most recent call last):
...
ValueError: list.remove(x): x not in list
Ponadto, w przeciwieństwie do .pop()
, nie można wywołać funkcji .remove()
bez przekazania wartości:
>>> books.remove()
Traceback (most recent call last):
...
TypeError: list.remove() takes exactly one argument (0 given)
Tutaj wywołujesz funkcję .remove()
bez przekazywania jej argumentu. W rezultacie otrzymasz komunikat TypeError
wyjaśniający, że metoda wymaga argumentu.
Usuń część listy
Twój użytkownik może potrzebować usunąć kilka elementów z listy jednocześnie. Powiedz, że aplikacja biblioteki publicznej wyświetla określoną liczbę elementów na stronę, podobną do usługi e -mail lub witryny zakupowej, i pozwala użytkownikowi wybrać i usunąć wszystkie elementy na tej stronie jednocześnie.
Jeśli lista pokazuje 25 pozycji na stronę, użytkownik byłoby szybciej usunięcie wszystkich 25 elementów razem jako fragment, zamiast kliknąć i usuwać każdy z nich indywidualnie.
Tego typu usunięcie można wykonać za pomocą instrukcji del
, której używałeś wcześniej do usuwania elementów z określonego indeksu. Instrukcja del
umożliwia także jednoczesne usuwanie fragmentów listy, więc zamiast podawać pojedynczy argument indeksujący, przekazujesz włączającą pozycję początkową i wyłączną pozycję końcową, oddzielone dwukropkiem.
Instrukcja del
następnie usuwa wszystkie elementy na liście, które znajdują się w tym zakresie indeksu. Załóżmy na przykład, że chcesz usunąć pierwsze trzy książki z listy:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[0:3]
>>> books
['Jaws']
W drugim wierszu wywołujesz wywołanie instrukcji del
, które usuwa plasterek listy. Następnie wyświetlasz zaktualizowaną listę, która pokazuje, że pierwsze trzy elementy zostały usunięte. Pamiętaj, że wartości indeksu zaczynają się od indeksu 3
. Tak więc w kodzie usunąłeś pierwsze trzy tytuły z listy.
Możesz także użyć negatywnych wartości indeksu z del
, aby usunąć zakres elementów listy, jak pokazano w poniższym przykładzie:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> del books[-3:-1]
>>> books
['Dragonsbane', 'The Hobbit', 'It']
W tym przykładzie w drugiej linii usuwasz książki począwszy od indeksu -3 (wpis Wonder) aż do pozycji o indeksie -1 (It). Pamiętaj, że w przypadku indeksów ujemnych elementy liczysz wstecz od końca listy. Na przykład instrukcja del Books[-3:-1]
jest w tym przypadku równoważna instrukcji del Books[2:4]
.
Usuń wszystkie elementy z listy
Załóżmy, że Twój użytkownik chce całkowicie wyczyścić listę książek. Możesz usunąć wszystkie elementy z listy za pomocą metody .clear()
. Oto jak to działa:
>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> books.clear()
>>> books
[]
W pierwszej linii wywołujesz metodę .clear()
, która nie przyjmuje żadnych argumentów i usuwa wszystkie pozycje z listy. Następnie sprawdzasz książki
w powłoce Pythona po operacji .clear()
, która potwierdza, że lista jest teraz pusta.
Usuń duplikaty za pomocą pętli
Załóżmy, że pracujesz nad aplikacją, która umożliwia zduplikowane wpisy na liście. Na przykład aplikacja kontaktowa może umożliwić wiele kontaktów z tym samym numerem telefonu, ale różnymi nazwami. W takim przypadku możesz napotkać listę z duplikatem numerów telefonów.
Aby usunąć duplikaty z listy, możesz użyć kombinacji pętli i metod listy. Takie podejście polega na iterowaniu listy i usuwaniu każdej instancji wartości, gdy istnieje więcej niż jedno wystąpienie tej wartości.
Wcześniej widziałeś, jak metoda .remove()
usuwa tylko pierwsze wystąpienie elementu, który pasuje do argumentu wartości. Teraz zobaczysz, jak możesz go używać w pętli.
Dla uproszczenia wyobraź sobie, że Twoja aplikacja książki kontaktowej jest używana w kraju, w którym obowiązują krótkie numery telefonów zawierające początkowy dwucyfrowy kod kraju. Załóżmy również, że kolejność liczb na liście jest ważna. Twoja lista kontaktów może wyglądać mniej więcej tak:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
Najpierw musisz określić, ile razy liczba pojawia się na liście. Python udostępnia metodę .count()
, która zwraca liczbę wystąpień określonej wartości na liście.
Na przykład możesz użyć
>>> phone_numbers.count("54123")
3
Wywołanie funkcji .count()
zwraca wartość 3
, informując, ile wystąpień numeru telefonu znajduje się na liście. Następnie czas utworzyć pętlę usuwającą duplikaty. Możesz utworzyć pętlę, która sprawdza, czy istnieje więcej niż jedno wystąpienie danej liczby, a następnie usuwa każdy duplikat, aż pozostanie tylko jedna liczba.
Używając metody .count()
i pętli, możesz iterować po liście kontaktów i dla każdego numeru, o ile liczba jest większa niż jeden, usuń jedno z wystąpień:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> for phone_number in phone_numbers[:]:
... while phone_numbers.count(phone_number) > 1:
... phone_numbers.remove(phone_number)
...
>>> phone_numbers
['54456', '54789', '54123']
W tym przykładzie widać listę numerów telefonów z duplikatami. W drugim wierszu konfigurujesz pętlę dla
, która będzie patrzeć na każdy numer, jeden na raz. Chociaż liczba liczby jest większa niż jedna, wywołujesz .Remove()
na liście z numerem jako argument. Po zakończeniu pętli będziesz mieć listę bez żadnych duplikatów. Zauważ, że zamówienie na końcowej liście opiera się na ostatnim zdaniu każdego elementu.
Aby uzyskać bardziej zwięzły sposób usuwania duplikatów, możesz także skorzystać ze słownika. Słownik to typ danych języka Python reprezentujący asocjacyjną kolekcję unikalnych kluczy odwzorowanych na wartości. Ponieważ słowniki nie mogą zawierać duplikatów kluczy, możesz użyć metody .fromkeys()
, aby usunąć kopie z listy:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> phone_numbers = list(dict.fromkeys(phone_numbers))
>>> phone_numbers
['54123', '54456', '54789']
Używasz metody .fromkeys()
, aby przekonwertować listę na słownik bez duplikatów kluczy. Następnie konwertujesz słownik z powrotem na listę, z której usunięto duplikaty. Słowniki zachowują kolejność wstawiania, dzięki czemu masz pewność, że elementy na deduplikowanej liście są ułożone tak samo, jak w oryginale. W przypadku tej metody ostateczna kolejność odpowiada kolejności pierwszego wystąpienia każdego elementu.
Użyj zestawu, aby usunąć duplikaty
We wcześniejszym przykładzie książki kontaktowej ma znaczenie kolejność liczb na liście. Jeśli jednak chcesz usunąć zduplikowane elementy na liście i nie dbaj o kolejność elementów, rozważ użycie zestawu zamiast listy.
Poniższy przykład pokazuje, w jaki sposób możesz przekonwertować listę na zestaw unikalnych numerów telefonów:
>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]
>>> set(phone_numbers)
{'54123', '54789', '54456'}
W podświetlonej linii używasz set()
, aby przekonwertować listę na zestaw, usuwając wszystkie zduplikowane wpisy. Pamiętaj, że zestawy to kolekcje nieuporządkowane, więc nie gwarantują, że elementy listy zostaną ułożone w oryginalnej kolejności. Z powodu tego zachowania zestaw może nie być właściwym typem danych do użycia, jeśli projekt wymaga, aby elementy pozostały uporządkowane.
Zestawy można jednak sortować na liście, która często jest ważnym wymogiem dla list kontaktów i innych takich aplikacji. Obsługują również wydajne testy członkowskie, umożliwiając szybkie sprawdzenie, czy wartość istnieje w kolekcji.
Wniosek
Nauczyłeś się różnych technik usuwania elementów z listy
Pythona, zarówno według pozycji, jak i wartości. Eksplorowałeś metody takie jak .pop()
, .remove()
i .clear()
. Dowiedziałeś się także o instrukcji del
. Każde z tych narzędzi oferuje unikalne podejście do manipulacji listami. Dodatkowo zagłębiłeś się w usuwanie duplikatów przy użyciu innych podejść, takich jak pętle, słowniki i zestawy.
Poznanie manipulacji listami jest niezbędne dla programisty Pythona, ponieważ listy są podstawowym typem danych w Pythonie.
W tym samouczku nauczyłeś się:
- Usuń element z listy według indeks Używając
.pop()
idel
- Użyj metody
.remove()
, aby usunąć pierwsze wystąpienie określonej wartości - Usuń kawałki lub części z listy za pomocą instrukcji
del
- Wyczyść Wszystkie elementy z listy za pomocą metody
.clear()
- Usuń duplikat elementy z pętlą , słownik lub set
Umiejętności te pozwolą ci skutecznie manipulować listami w projektach Python, dzięki czemu kod jest bardziej solidny i dostosowywany do różnych potrzeb obsługi danych.