Tutorial ten pokazuje wszystko, co musisz wiedzieć, aby opanować podstawową metodę pop()
najbardziej podstawowego kontenerowego typu danych w języku programowania Python.
Definicja i zastosowanie:
Metoda list.pop()
usuwa i zwraca ostatni element z istniejącego list
. Metoda list.pop(index)
z opcjonalnym argumentem index
usuwa i zwraca element znajdujący się na pozycji index
.
Tutaj krótki przykład:
>>> lst = >>> lst.pop()3>>> lst
W pierwszej linii przykładu tworzysz listę lst
. Następnie usuwamy i zwracamy ostatni element 3 z listy. W rezultacie otrzymujemy listę zawierającą tylko dwa elementy .
Code Puzzle – Try It Yourself:
Teraz znasz już podstawy. Pogłębimy Twoje zrozumienie dzięki krótkiej łamigłówce kodowej – czy potrafisz ją rozwiązać?
Możesz również rozwiązać tę łamigłówkę i śledzić swoje umiejętności posługiwania się językiem Python w naszej interaktywnej aplikacji Finxter.
Składnia:
Możesz wywołać tę metodę na każdym obiekcie listy w Pythonie. Oto składnia:
list.pop(index=-1)
Argumenty:
Argument | Opis |
---|---|
index |
Opcjonalny argument. Można określić indeks elementu, który ma zostać usunięty i zwrócony. Domyślny argument prowadzi do usunięcia ostatniego elementu listy o indeksie -1. |
Wartość zwracana:
Metoda list.pop()
ma wartość zwracaną Object
. Usuwa ona konkretny element z listy (domyślnie: ostatni element) i zwraca go bezpośrednio do wywołującego.
Wideo:
- Najlepszy przewodnik po listach w Pythonie
Tutaj jest twój darmowy PDF cheat sheet pokazujący wszystkie metody list w Pythonie na jednej prostej stronie. Kliknij na obrazek, aby pobrać plik PDF w wysokiej rozdzielczości, wydrukuj go i powieś na ścianie swojego biura:
Spis treści
Python List pop() By Index.
Możesz użyć metody list.pop(index)
do z opcjonalnym argumentem index, aby usunąć i zwrócić element na pozycji index
z listy.
Tutaj przykład:
>>> customers = >>> customers.pop(2)'Ann'>>> customers>>> customers.pop(0)'Alice'>>> customers
Po utworzeniu listy z czterema elementami, najpierw usuwasz i zwracasz drugi element 'Ann'
. Następnie usuwasz i zwracasz pierwszy element 'Alice'
. Na wynikowej liście pozostały tylko dwa elementy.
Python List pop() First / Front / Left / Head
Metoda list.pop(index)
do z opcjonalnym argumentem index, aby usunąć i zwrócić element na pozycji index
z listy. Więc jeśli chcesz usunąć pierwszy element z listy, po prostu ustaw index=0
przez wywołanie list.pop(0)
. To spowoduje wyskakiwanie pierwszego elementu z listy.
Tutaj przykład:
>>> primes = >>> primes.pop(0)1>>> primes
pop(0)
Metoda usuwa pierwszy element 1 z listy liczb pierwszych podanych w przykładzie.
Python List pop() By Value
W poprzednich dwóch przykładach, widziałeś jak wyskakiwać elementy przez indeks. Ale czy można również pop przez wartość?
Tak, można za pomocą metody list.index(value)
, która daje nam indeks wartości elementu na liście. Teraz możesz użyć metody list.pop(index)
na tym indeksie, aby usunąć wartość z listy i uzyskać wynik jako wartość zwracaną.
Tutaj jest przykład, w którym chcesz wyskoczyć element 7 z listy i przechowywać wynik w zmiennej some_prime
.
>>> primes = >>> some_prime = primes.pop(primes.index(7))>>> some_prime7
Jeśli nie interesuje Cię wartość zwracana, a chcesz jedynie usunąć pierwsze wystąpienie wartości x
w zmiennej list
, użyj metody list.remove(x)
.
Powiązany artykuł:
- Python List remove()
Python List pop() Multiple Elements
Jeśli można wyskoczyć z jednego elementu z listy Pythona, naturalnym pytaniem jest, czy można również wyskoczyć z wielu elementów w tym samym czasie?
Odpowiedź brzmi nie. Nie można bezpośrednio wyskakiwać wielu elementów z listy. Ale można to zrobić pośrednio za pomocą prostej instrukcji list comprehension.
Python List pop() First n Elements
Powiedzmy, że chcesz wypisać pierwsze n elementów z listy. Jak to zrobić?
Po prostu tworzysz listę wartości, używając list comprehension , aby usunąć i zwrócić pierwsze n
elementy listy.
Tutaj inny przykład:
>>> lst = >>> popped = >>> popped>>> lst
Wyskakująca lista zawiera pięć pierwszych elementów. W oryginalnej liście pozostał tylko jeden element.
Python List pop() Last n Elements
Powiedzmy, że chcesz wyskoczyć z listy z ostatnimi n elementami. Jak to zrobić?
Po prostu tworzysz listę wartości za pomocą list comprehension , aby usunąć i zwrócić ostatnie n
elementy listy.
Tutaj inny przykład:
>>> lst = >>> >>> lst
Wyskakująca lista zawiera pięć ostatnich elementów. Na oryginalnej liście pozostał tylko jeden element.
Złożoność czasowa Python List pop()
Złożoność czasowa metody pop()
jest stała O(1). Bez względu na to, ile elementów znajduje się na liście, wyskakiwanie elementu z listy zajmuje tyle samo czasu (plus minus stałe czynniki).
Powodem jest to, że listy są zaimplementowane w cPythonie jako tablice. Pobieranie elementu z tablicy ma stałą złożoność. Usunięcie elementu z tablicy również ma stałą złożoność. Tak więc pobieranie i usuwanie elementu, jak to robi metoda pop()
, ma również stałą złożoność runtime.
Napisałem krótki skrypt, aby ocenić złożoność runtime metody pop()
w Pythonie:
import matplotlib.pyplot as pltimport timey = for i in : lst = list(range(i)) t0 = time.time() x = lst.pop(0) t1 = time.time() y.append(t1-t0)plt.plot(y)plt.xlabel("List elements (10**5)")plt.ylabel("Time (sec)")plt.show()
Wynikowy wykres pokazuje, że złożoność runtime jest liniowa, nawet jeśli liczba elementów drastycznie wzrasta:
(Ok, są pewne nierówności, ale kogo to tak naprawdę obchodzi?)
Zauważ, że złożoność runtime jest nadal liniowa, jeśli pop ostatni element lub dowolny inny dowolny element z listy.
Python List pop() vs remove()
Jaka jest różnica między list.pop() i list.remove()?
- Metoda
list.remove(element)
usuwa pierwsze wystąpienie elementuelement
z istniejącej listylist
. Nie usuwa jednak wszystkich wystąpień tego elementu na liście! - Metoda
list.pop()
usuwa i zwraca ostatni element z istniejącegolist
. Metodalist.pop(index)
z opcjonalnym argumentemindex
usuwa i zwraca element na pozycjiindex
.
Więc, metoda remove usuwa przez wartość, a metoda pop usuwa przez indeks. Ponadto, metoda remove nie zwraca nic (operuje na samej liście), a metoda pop zwraca usunięty obiekt.
Python List Pop and Push (Stack)
Python nie posiada wbudowanej struktury danych stosu, ponieważ nie jest ona potrzebna. Możesz po prostu utworzyć pustą listę i nazwać ją stosem. Następnie, używasz metody stack.append(x), aby wepchnąć element x na stos. I używasz metody stack.pop(), aby wypchnąć najwyższy element ze stosu.
Przykład pokazuje, jak wypchnąć trzy wartości na stos, a następnie usunąć je w tradycyjnej kolejności First-In Last-Out (FILO).
>>> stack = >>> stack.append(5)>>> stack.append(42)>>> stack.append("Ann")>>> stack.pop()'Ann'>>> stack.pop()42>>> stack.pop()5>>> stack
Python List pop() Without Remove
Chcesz pop()
element z danej listy bez jej usuwania? Nie rób tego! Zamiast tego użyj prostego indeksowania. Aby uzyskać element o indeksie i
z list
, wystarczy użyć schematu indeksowania list
. Pozwoli to zachować oryginalny element na liście bez jego usuwania.
Python List pop() If Not Empty
Jak można pop() element tylko wtedy, gdy lista nie jest pusta w jednej linii kodu? Użyj operatora trójskładnikowego w Pythonie lst.pop() if lst else None
w następujący sposób:
>>> lst = >>> for i in range(5):print(lst.pop() if lst else None)321NoneNone
Próbujesz pięciokrotnie wyskoczyć z listy zawierającej tylko trzy wartości. Nie ma jednak żadnego komunikatu o błędzie, ponieważ biegle posługujesz się operatorem trójskładnikowym, który w jednej linii sprawdza, czy lista jest pusta. Jeśli jest pusta, nie wyskakuje, ale zwraca wartość None
.
Jeśli nie użyjesz operatora trójskładnikowego w tym przykładzie, Python wyrzuci IndexError
, gdy będziesz próbował pop z pustej listy:
>>> lst = >>> for i in range(5):print(lst.pop())321Traceback (most recent call last): File "<pyshell#15>", line 2, in <module> print(lst.pop())IndexError: pop from empty list
Python List pop() Slice
Czy możesz pop cały plasterek naraz? Cóż, możesz usunąć cały plasterek za pomocą słowa kluczowego del: aby usunąć plasterek lst
z listy, możesz zadzwonić del lst
. Nie otrzymasz jednak wycinka jako wartości zwracanej, więc możesz chcieć najpierw przechować wycinek w osobnej zmiennej, zanim usuniesz go z listy.
Python List pop() While Iterating
Zawsze niebezpiecznie jest zmieniać listę, nad którą aktualnie iterujesz.
Dlaczego? Ponieważ iterator jest tworzony tylko raz w definicji pętli i uparcie będzie dawał Ci indeksy, które przygotował na początku. Jeśli pętla się zmieni, zmienią się też indeksy elementów. Ale iterator nie dostosowuje indeksów tak, aby uwzględniały te zmiany. Oto przykład:
>>> lst = list(range(10))>>> for i in range(len(lst)):lst.pop(i)02468Traceback (most recent call last): File "<pyshell#20>", line 2, in <module> lst.pop(i)IndexError: pop index out of range
Wow – to było niespodziewane, prawda? Wyskoczyłeś tylko co drugi element z listy. Dlaczego? Ponieważ w pierwszej iteracji, zmienna indeksowa i=0
. Teraz usuwamy to z listy. Element 1 na liście ma teraz indeks 0 po usunięciu poprzedniego elementu wiodącego. Ale w drugiej iteracji pętli, zmienna pętli ma indeks i=1
. Jest to następny element, który ma zostać wyskakujący. Ale pominąłeś wyskakiwanie elementu 1 z listy na pozycji o indeksie 0! Tylko każdy inny element jest popped jako wynik.
Alternatywne sposoby usuwania elementów z listy
Istnieją pewne alternatywne sposoby usuwania elementów z listy. Zobacz tabelę poglądową:
Metoda | Opis |
---|---|
lst.remove(x) |
Usuń element z listy (według wartości) |
lst.pop() |
Usuń element z listy (według indeksu) i zwróć element |
lst.clear() |
Usuń wszystkie elementy z listy |
del lst |
Usuń jeden lub więcej elementów z listy (przez indeks lub plasterek) |
Zrozumienie listy | Usuń wszystkie elementy, które spełniają określony warunek |
Następnie, zanurzysz się w każdej z tych metod, aby uzyskać pewne głębokie zrozumienie.
remove() – Remove An Element by Value
Aby usunąć element z listy, użyj metody list.remove(element)
, którą widziałeś już wcześniej:
>>> lst = >>> lst.remove("Ann")>>> lst
Spróbuj sam:
Metoda przechodzi od lewej do prawej i usuwa pierwsze wystąpienie elementu, który jest równy temu, który ma zostać usunięty.
Usuwany element nie istnieje
Jeśli próbujesz usunąć element x z listy, ale x nie istnieje na liście, Python wyrzuca błąd wartości:
>>> lst = >>> lst.remove('Frank')Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> lst.remove('Frank')ValueError: list.remove(x): x not in list
pop() – Remove An Element By Index
Domyślnie metoda pop()
usuwa ostatni element z listy i zwraca ten element.
>>> lst = >>> lst.pop()'Ann'>>> lst
Ale możesz również zdefiniować opcjonalny argument index. W tym przypadku, usuniesz element w podanym indeksie – mało znany sekret Pythona!
>>> lst = >>> lst.pop(1)'Bob'>>> lst
clear() – Usuń wszystkie elementy
Metoda clear()
po prostu usuwa wszystkie elementy z podanego obiektu listy.
>>> lst = >>> lst.clear()>>> lst
del – Remove Elements by Index or Slice
Ta sztuczka również jest stosunkowo mało znana wśród początkujących użytkowników Pythona:
- Użyj
del lst
, aby usunąć element w indeksie. - Użyj
del lst
, aby usunąć wszystkie elementy w plasterku.
>>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst
Powiązane artykuły na blogu:
- Sprawdź mój pełny samouczek krojenia, który sprawi, że staniesz się mistrzem krojenia w 15 minut lub tak!
List Comprehension – Remove Elements Conditionally
Okay, to jest rodzaj oszustwa, ponieważ ta metoda tak naprawdę nie usuwa elementów z obiektu listy. Tworzy jedynie nową listę z elementami, które spełniają twój warunek.
List comprehension jest kompaktowym sposobem tworzenia list. Prosta formuła to .
- Wyrażenie: Co zrobić z każdym elementem listy?
- Kontekst: Jakie elementy listy wybrać? Składa się on z dowolnej liczby instrukcji for i if.
Przykład tworzy listę
.
Możesz również zdefiniować warunek, taki jak wszystkie nieparzyste wartości x%2==1
w części kontekstowej za pomocą warunku if. To prowadzi nas do sposobu na usunięcie wszystkich elementów, które nie spełniają określonego warunku na danej liście.
>>> lst = list(range(10))>>> lst_new = >>> lst_new
Podczas iteracji nad całą listą lst
, warunek x%2
wymaga, aby elementy były nieparzyste.
Powiązane artykuły na blogu:
- Check out my full list comprehension tutorial for maximal learning!
Python List pop() Thread Safe
Czy masz wiele wątków, które mają dostęp do twojej listy w tym samym czasie? Wtedy musisz być pewien, że operacje na liście (takie jak pop()
) są rzeczywiście bezpieczne dla wątków.
Innymi słowy: czy możesz wywołać operację pop()
w dwóch wątkach na tej samej liście w tym samym czasie? (I czy możesz być pewien, że wynik jest znaczący?)
Odpowiedź brzmi tak (jeśli używasz implementacji cPython). Powodem jest globalna blokada interpretera Pythona, która zapewnia, że wątek, który aktualnie pracuje nad swoim kodem, najpierw zakończy swoją bieżącą podstawową operację Pythona, jak określono w implementacji cPython. Tylko wtedy, gdy zakończy tę operację, następny wątek będzie mógł uzyskać dostęp do zasobu obliczeniowego. Jest to zapewnione dzięki wyrafinowanemu schematowi blokowania przez implementację cPythona.
Jedyną rzeczą, którą musisz wiedzieć, jest to, że każda podstawowa operacja w implementacji cPythona jest atomowa. Jest ona wykonywana w całości i na raz, zanim jakikolwiek inny wątek będzie miał szansę uruchomić się na tym samym silniku wirtualnym. Dlatego nie ma warunków wyścigu. Przykładem takiego warunku wyścigu może być następująca sytuacja: pierwszy wątek odczytuje wartość z listy, drugi wątek nadpisuje tę wartość, a pierwszy wątek ponownie nadpisuje tę wartość, unieważniając operację drugiego wątku.
Wszystkie operacje cPythona są bezpieczne dla wątków. Ale jeśli połączysz te operacje w funkcje wyższego poziomu, nie są one na ogół bezpieczne dla wątków, ponieważ składają się z wielu (być może przeplatających się) operacji.
Gdzie iść stąd?
Metoda list.remove(element)
usuwa pierwsze wystąpienie element
z list
.
Poznałeś tajniki tej ważnej metody listy Pythona.
Jeśli wciąż zmagasz się z tymi podstawowymi poleceniami Pythona i czujesz, że utknąłeś w postępach w nauce, mam coś dla Ciebie: Python One-Liners (Amazon Link).
W książce przedstawię ci dokładny przegląd najważniejszych tematów z dziedziny informatyki, takich jak uczenie maszynowe, wyrażenia regularne, data science, NumPy i podstawy Pythona – wszystko w jednej linijce kodu Pythona!
Odbierz książkę z Amazona!
Oficjalny opis książki: Jednolinijkowce Pythona pokażą czytelnikom, jak wykonywać przydatne zadania za pomocą jednej linijki kodu Pythona. Po krótkim odświeżeniu Pythona, książka obejmuje istotne zaawansowane tematy, takie jak krojenie, rozumienie list, nadawanie, funkcje lambda, algorytmy, wyrażenia regularne, sieci neuronowe, regresja logistyczna i wiele innych. Każda z 50 części książki przedstawia problem do rozwiązania, prowadzi czytelnika przez umiejętności niezbędne do jego rozwiązania, a następnie dostarcza zwięzłe rozwiązanie w języku Python wraz ze szczegółowym objaśnieniem.
Pracując jako badacz systemów rozproszonych, dr Christian Mayer odnalazł swoją miłość do nauczania studentów informatyki.
Aby pomóc studentom osiągnąć wyższy poziom sukcesu w Pythonie, założył stronę internetową poświęconą edukacji programistycznej Finxter.com. Jest autorem popularnej książki o programowaniu Python One-Liners (NoStarch 2020), współautorem serii Coffee Break Python, entuzjastą informatyki, freelancerem i właścicielem jednego z 10 największych blogów Pythona na świecie.
Jego pasją jest pisanie, czytanie i kodowanie. Ale jego największą pasją jest służenie aspirującym koderom poprzez Finxter i pomaganie im w zwiększaniu ich umiejętności. Możesz dołączyć do jego darmowej akademii e-mailowej tutaj.