Dieses Tutorial zeigt Ihnen alles, was Sie wissen müssen, um die essenzielle pop()
-Methode des grundlegendsten Container-Datentyps der Programmiersprache Python zu beherrschen.
Definition und Verwendung:
Die list.pop()
-Methode entfernt und liefert das letzte Element aus einem bestehenden list
. Die Methode list.pop(index)
mit dem optionalen Argument index
entfernt und gibt das Element an der Position index
zurück.
Hier ist ein kurzes Beispiel:
>>> lst = >>> lst.pop()3>>> lst
In der ersten Zeile des Beispiels erstellen Sie die Liste lst
. Anschließend entfernen Sie das letzte Element 3 aus der Liste und geben es zurück. Das Ergebnis ist die Liste mit nur zwei Elementen .
Code-Puzzle – Probieren Sie es selbst aus:
Nun kennen Sie die Grundlagen. Lassen Sie uns Ihr Verständnis mit einem kurzen Code-Rätsel vertiefen – können Sie es lösen?
Sie können auch dieses Rätsel lösen und Ihre Python-Kenntnisse auf unserer interaktiven Finxter-App überprüfen.
Syntax:
Sie können diese Methode auf jedem Listenobjekt in Python aufrufen. Hier ist die Syntax:
list.pop(index=-1)
Argumente:
Argument | Beschreibung |
---|---|
index |
Optionales Argument. Sie können den Index des zu entfernenden und zurückzugebenden Elements angeben. Das Standardargument führt zum Entfernen des letzten Listenelements mit Index -1. |
Rückgabewert:
Die Methode list.pop()
hat den Rückgabewert Object
. Es entfernt das jeweilige Element aus der Liste (Standard: das letzte Element) und gibt es direkt an den Aufrufer zurück.
Video:
- Der ultimative Leitfaden für Python-Listen
Hier ist Ihr kostenloser PDF-Spickzettel, der Ihnen alle Python-Listenmethoden auf einer einfachen Seite zeigt. Klicken Sie auf das Bild, um die hochauflösende PDF-Datei herunterzuladen, auszudrucken und an Ihre Bürowand zu hängen:
Inhaltsverzeichnis
Python Liste pop() nach Index
Sie können die Methode list.pop(index)
mit dem optionalen Argument index verwenden, um das Element an der Position index
aus der Liste zu entfernen und zurückzugeben.
Hier ein Beispiel:
>>> customers = >>> customers.pop(2)'Ann'>>> customers>>> customers.pop(0)'Alice'>>> customers
Nach dem Erstellen der Liste mit vier Elementen entfernen Sie zunächst das zweite Element 'Ann'
und geben es zurück. Dann entfernen Sie das erste Element 'Alice'
und geben es zurück. Die resultierende Liste hat nur noch zwei Elemente.
Python List pop() First / Front / Left / Head
Die Methode list.pop(index)
mit dem optionalen Argument index entfernt und gibt das Element an Position index
aus der Liste zurück. Wenn Sie also das erste Element aus der Liste entfernen wollen, setzen Sie einfach index=0
durch Aufruf von list.pop(0)
. Dadurch wird das erste Element aus der Liste entfernt.
Hier ist ein Beispiel:
>>> primes = >>> primes.pop(0)1>>> primes
Die pop(0)
-Methode entfernt das erste Element 1 aus der Liste der Primzahlen aus dem Beispiel.
Python List pop() By Value
In den beiden vorangegangenen Beispielen haben Sie gesehen, wie man Elemente nach Index poppen kann. Aber können Sie auch nach Wert poppen?
Ja, das können Sie, indem Sie die Methode list.index(value)
verwenden, die Ihnen den Index des Elementwertes in der Liste liefert. Nun können Sie die Methode list.pop(index)
auf diesen Index anwenden, um den Wert aus der Liste zu entfernen und das Ergebnis als Rückgabewert zu erhalten.
Hier ein Beispiel, bei dem Sie das Element 7 aus der Liste entfernen und das Ergebnis in der Variablen some_prime
speichern möchten.
>>> primes = >>> some_prime = primes.pop(primes.index(7))>>> some_prime7
Wenn Sie nicht am Rückgabewert interessiert sind, sondern nur das erste Vorkommen des Wertes x
im list
entfernen wollen, verwenden Sie die Methode list.remove(x)
.
Verbundener Artikel:
- Python List remove()
Python List pop() Multiple Elements
Wenn Sie ein Element aus einer Python-Liste herauslösen können, ist die natürliche Frage, ob Sie auch mehrere Elemente gleichzeitig herauslösen können?
Die Antwort lautet nein. Sie können nicht direkt mehrere Elemente aus einer Liste herausholen. Aber Sie können es indirekt mit einer einfachen Listenverstehensanweisung tun.
Python Liste pop() Erste n Elemente
Sagen wir, Sie wollen die ersten n Elemente aus einer Liste herausholen. Wie machen Sie das?
Sie erstellen einfach eine Liste von Werten und verwenden List Comprehension , um die ersten n
Elemente der Liste zu entfernen und zurückzugeben.
Hier ist ein weiteres Beispiel:
>>> lst = >>> popped = >>> popped>>> lst
Die gepoppte Liste enthält die ersten fünf Elemente. Die ursprüngliche Liste hat nur noch ein Element.
Python Liste pop() Letzte n Elemente
Sagen wir, Sie wollen die letzten n Elemente aus einer Liste poppen. Wie machen Sie das?
Sie erstellen einfach eine Liste von Werten mit Hilfe von List Comprehension , um die letzten n
Elemente der Liste zu entfernen und zurückzugeben.
Hier ein weiteres Beispiel:
>>> lst = >>> >>> lst
Die gepoppte Liste enthält die letzten fünf Elemente. Die ursprüngliche Liste hat nur noch ein Element.
Zeitkomplexität von Python List pop()
Die Zeitkomplexität der pop()
-Methode ist konstant O(1). Unabhängig davon, wie viele Elemente in der Liste sind, benötigt das Popping eines Elements aus einer Liste die gleiche Zeit (plus minus konstante Faktoren).
Der Grund ist, dass Listen in cPython mit Arrays implementiert sind. Das Abrufen eines Elements aus einem Array hat eine konstante Komplexität. Das Entfernen des Elements aus dem Array hat ebenfalls eine konstante Komplexität. Daher hat das Abrufen und Entfernen des Elements, wie es die pop()
-Methode macht, ebenfalls konstante Laufzeitkomplexität.
Ich habe ein kurzes Skript geschrieben, um die Laufzeitkomplexität der pop()
-Methode in Python zu ermitteln:
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()
Das Ergebnis zeigt, dass die Laufzeitkomplexität linear ist, auch wenn die Anzahl der Elemente drastisch steigt:
(Okay, es gibt ein paar Unebenheiten, aber wen interessiert das wirklich?)
Beachten Sie, dass die Laufzeitkomplexität immer noch linear ist, wenn wir das letzte Element oder ein beliebiges anderes Element aus der Liste herauslösen.
Python List pop() vs remove()
Was ist der Unterschied zwischen der list.pop() und den Methoden list.remove()?
- Die Methode
list.remove(element)
entfernt das erste Vorkommen deselement
aus einem bestehendenlist
. Sie entfernt jedoch nicht alle Vorkommen des Elements in der Liste! - Die Methode
list.pop()
entfernt das letzte Element aus einem bestehendenlist
und gibt es zurück. Die Methodelist.pop(index)
mit dem optionalen Argumentindex
entfernt und gibt das Element an der Positionindex
zurück.
Die remove-Methode entfernt also nach Wert und die pop-Methode nach Index. Außerdem gibt die remove-Methode nichts zurück (sie operiert auf der Liste selbst) und die pop-Methode gibt das entfernte Objekt zurück.
Python List Pop and Push (Stack)
Python hat keine eingebaute Stack-Datenstruktur, weil sie nicht benötigt wird. Sie können einfach eine leere Liste erstellen und sie stack nennen. Dann verwenden Sie die Methode stack.append(x), um das Element x auf den Stack zu schieben. Und Sie verklagen die Methode stack.pop(), um das oberste Element vom Stapel zu schieben.
Hier ist ein Beispiel, das zeigt, wie man drei Werte auf den Stapel schiebt und sie dann in der traditionellen First-In Last-Out (FILO) Reihenfolge von Stapeln entfernt.
>>> 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
Wollen Sie pop()
ein Element aus einer gegebenen Liste entfernen, ohne es zu entfernen? Tun Sie es nicht! Verwenden Sie stattdessen eine einfache Indizierung. Um ein Element mit dem Index i
aus list
zu holen, verwenden Sie einfach das Indexierungsschema list
. Dadurch bleibt das ursprüngliche Element in der Liste, ohne dass es entfernt wird.
Python Liste pop() If Not Empty
Wie können Sie in einer einzigen Codezeile ein Element nur dann pop(), wenn die Liste nicht leer ist? Verwenden Sie den ternären Operator in Python lst.pop() if lst else None
wie folgt:
>>> lst = >>> for i in range(5):print(lst.pop() if lst else None)321NoneNone
Sie versuchen, das ganz linke Element aus einer Liste mit nur drei Werten fünfmal zu poppen. Es gibt jedoch keine Fehlermeldung, weil Sie den ternären Operator geschickt einsetzen, der in einer einzigen Zeile prüft, ob die Liste leer ist. Wenn sie leer ist, wird nicht gepoppt, sondern der Wert None
zurückgegeben.
Wenn Sie den ternären Operator in diesem Beispiel nicht verwenden, wirft Python ein IndexError
aus, wenn Sie versuchen, aus einer leeren Liste zu popen:
>>> 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
Kann man ein ganzes Slice auf einmal popen? Nun, Sie können ein ganzes Slice mit dem Schlüsselwort del entfernen: Um das Slice lst
aus der Liste zu entfernen, können Sie del lst
aufrufen. Allerdings erhalten Sie das Slice nicht als Rückgabewert, so dass Sie das Slice zunächst in einer separaten Variablen speichern sollten, bevor Sie es aus der Liste entfernen.
Python List pop() While Iterating
Es ist immer gefährlich, eine Liste zu verändern, über die Sie gerade iterieren.
Warum? Weil der Iterator nur einmal in der Schleifendefinition angelegt wird und er Ihnen stur die Indizes liefert, die er am Anfang vorbereitet hat. Wenn sich die Schleife ändert, ändern sich auch die Indizes der Elemente. Aber der Iterator passt die Indizes nicht an, um diese Änderungen zu berücksichtigen. Hier ist ein Beispiel:
>>> 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 – das war unerwartet, oder? Sie haben nur jedes zweite Element aus der Liste gepoppt. Warum? Weil in der ersten Iteration die Indexvariable i=0
. Diese entfernen wir nun aus der Liste. Das Element 1 in der Liste hat nun den Index 0, nachdem das vorhergehende führende Element entfernt wurde. Aber in der zweiten Schleifeniteration hat die Schleifenvariable den Index i=1
. Dies ist das nächste Element, das gepoppt werden soll. Sie haben aber das Popping des Elements 1 aus der Liste an der Position Index 0 übersprungen! Als Ergebnis wird nur jedes andere Element gepoppt.
Alternative Wege, um Elemente aus einer Liste zu entfernen
Es gibt einige alternative Wege, um Elemente aus der Liste zu entfernen. Siehe dazu die Übersichtstabelle:
Methode | Beschreibung |
---|---|
lst.remove(x) |
Entferne ein Element aus der Liste (nach Wert) |
lst.pop() |
Entferne ein Element aus der Liste (nach Index) und gebe das Element zurück |
lst.clear() |
Alle Elemente aus der Liste entfernen | del lst |
Ein oder mehrere Elemente aus der Liste entfernen (nach Index oder Slice) |
Listenverständnis | Entferne alle Elemente, die eine bestimmte Bedingung erfüllen |
Nächste, werden Sie in jede dieser Methoden eintauchen, um ein tieferes Verständnis zu erlangen.
remove() – Ein Element nach Wert entfernen
Um ein Element aus der Liste zu entfernen, verwenden Sie die list.remove(element)
-Methode, die Sie bereits gesehen haben:
>>> lst = >>> lst.remove("Ann")>>> lst
Versuchen Sie es selbst:
Die Methode geht von links nach rechts und entfernt das erste Vorkommen des Elements, das gleich dem zu entfernenden ist.
Entferntes Element existiert nicht
Wenn Sie versuchen, das Element x aus der Liste zu entfernen, x aber nicht in der Liste existiert, wirft Python einen Wertfehler:
>>> 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() – Ein Element per Index entfernen
Die Methode pop()
entfernt standardmäßig das letzte Element aus der Liste und gibt das Element zurück.
>>> lst = >>> lst.pop()'Ann'>>> lst
Sie können aber auch das optionale Argument index angeben. In diesem Fall entfernen Sie das Element am angegebenen Index – ein wenig bekanntes Python-Geheimnis!
>>> lst = >>> lst.pop(1)'Bob'>>> lst
clear() – Alle Elemente entfernen
Die clear()
-Methode entfernt einfach alle Elemente aus einem angegebenen Listenobjekt.
>>> lst = >>> lst.clear()>>> lst
del – Elemente nach Index oder Slice entfernen
Auch dieser Trick ist unter Python-Anfängern relativ unbekannt:
- Benutzen Sie
del lst
, um das Element bei Index zu entfernen. - Verwenden Sie
del lst
, um alle Elemente im Slice zu entfernen.
>>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst
Verbundene Blog-Artikel:
- Sehen Sie sich mein komplettes Slicing-Tutorial an, das Sie in nur 15 Minuten zu einem Meister-Slicer macht!
Listenverständnis – Elemente bedingt entfernen
Okay, das ist ein bisschen geschummelt, denn diese Methode entfernt nicht wirklich Elemente aus einem Listenobjekt. Sie erzeugt lediglich eine neue Liste mit einigen Elementen, die Ihre Bedingung erfüllen.
Listenverständnis ist eine kompakte Art, Listen zu erstellen. Die einfache Formel lautet:
- Ausdruck: Was soll mit jedem Listenelement gemacht werden?
- Kontext: Welche Listenelemente sollen ausgewählt werden? Er besteht aus einer beliebigen Anzahl von for- und if-Anweisungen.
Das Beispiel erzeugt die Liste
.
Sie können auch eine Bedingung wie z. B. alle ungeraden Werte x%2==1
im Kontextteil definieren, indem Sie eine if-Bedingung verwenden. Dies führt uns zu einer Möglichkeit, alle Elemente zu entfernen, die eine bestimmte Bedingung in einer gegebenen Liste nicht erfüllen.
>>> lst = list(range(10))>>> lst_new = >>> lst_new
Während Sie über die gesamte Liste lst
iterieren, erfordert die Bedingung x%2
, dass die Elemente ungerade sind.
Verbundene Blog-Artikel:
- Schauen Sie sich mein komplettes Listenverstehens-Tutorial an, um maximal zu lernen!
Python List pop() Thread Safe
Haben Sie mehrere Threads, die gleichzeitig auf Ihre Liste zugreifen? Dann müssen Sie sicher sein, dass die Listenoperationen (wie pop()
) tatsächlich thread-sicher sind.
Mit anderen Worten: können Sie die pop()
-Operation in zwei Threads auf der gleichen Liste zur gleichen Zeit aufrufen? (Und können Sie sicher sein, dass das Ergebnis sinnvoll ist?)
Die Antwort ist ja (wenn Sie die cPython-Implementierung verwenden). Der Grund ist die globale Interpretersperre von Python, die dafür sorgt, dass ein Thread, der gerade an seinem Code arbeitet, zuerst seine aktuelle grundlegende Python-Operation beendet, wie sie von der cPython-Implementierung definiert wird. Erst wenn er mit dieser Operation abschließt, kann der nächste Thread auf die Rechenressource zugreifen. Dies wird durch ein ausgeklügeltes Locking-Schema von der cPython-Implementierung sichergestellt.
Das Einzige, was Sie wissen müssen, ist, dass jede Grundoperation in der cPython-Implementierung atomar ist. Sie wird vollständig und auf einmal ausgeführt, bevor irgendein anderer Thread die Chance hat, auf derselben virtuellen Engine zu laufen. Daher gibt es keine Race Conditions. Ein Beispiel für eine solche Race Condition wäre folgendes: Der erste Thread liest einen Wert aus der Liste, der zweite Thread überschreibt den Wert, und der erste Thread überschreibt den Wert erneut, wodurch die Operation des zweiten Threads ungültig wird.
Alle cPython-Operationen sind thread-sicher. Aber wenn Sie diese Operationen zu Funktionen auf höherer Ebene zusammenfassen, sind diese nicht generell thread-sicher, da sie aus vielen (möglicherweise ineinandergreifenden) Operationen bestehen.
Wo geht es weiter?
Die Methode list.remove(element)
entfernt das erste Vorkommen von element
aus dem list
.
Sie haben diese wichtige Python-Listenmethode kennengelernt.
Wenn Sie sich immer wieder mit den grundlegenden Python-Befehlen herumschlagen und Sie das Gefühl haben, in Ihrem Lernfortschritt stecken zu bleiben, habe ich etwas für Sie: Python One-Liners (Amazon Link).
In dem Buch gebe ich Ihnen einen gründlichen Überblick über wichtige Informatik-Themen wie maschinelles Lernen, reguläre Ausdrücke, Data Science, NumPy und Python-Grundlagen – und das alles in einer einzigen Zeile Python-Code!
Bestellen Sie das Buch bei Amazon!
OFFIZIELLE BUCHBESCHREIBUNG: Python One-Liners zeigt dem Leser, wie er nützliche Aufgaben mit einer Zeile Python-Code erledigen kann. Nach einer kurzen Python-Auffrischung behandelt das Buch wesentliche fortgeschrittene Themen wie Slicing, List Comprehension, Broadcasting, Lambda-Funktionen, Algorithmen, reguläre Ausdrücke, neuronale Netze, logistische Regression und mehr. Jeder der 50 Buchabschnitte stellt ein zu lösendes Problem vor, führt den Leser durch die zur Lösung dieses Problems notwendigen Fähigkeiten und bietet dann eine prägnante Einzeiler-Python-Lösung mit einer detaillierten Erklärung.
Während seiner Arbeit als Forscher im Bereich verteilter Systeme entdeckte Dr. Christian Mayer seine Liebe zum Unterrichten von Informatikstudenten.
Um Studenten dabei zu helfen, ein höheres Niveau an Python-Erfolg zu erreichen, gründete er die Website Finxter.com für Programmierunterricht. Er ist Autor des beliebten Programmierbuchs Python One-Liners (NoStarch 2020), Mitautor der Coffee Break Python-Reihe von Büchern im Selbstverlag, Informatik-Enthusiast, Freiberufler und Besitzer eines der 10 größten Python-Blogs weltweit.
Seine Leidenschaften sind Schreiben, Lesen und Programmieren. Aber seine größte Leidenschaft ist es, aufstrebenden Codern durch Finxter zu dienen und ihnen zu helfen, ihre Fähigkeiten zu verbessern. Sie können seiner kostenlosen E-Mail-Akademie hier beitreten.