Heim >Backend-Entwicklung >Python-Tutorial >Warum das Iterieren und Entfernen aus einer Liste in Python zu unerwarteten Ergebnissen führen kann
Elemente aus einer Liste während der Iteration entfernen – Warum die typische Redewendung fehlschlägt
Beim Programmieren ist es üblich, über eine Liste zu iterieren und sie zu entfernen Artikel nach Bedarf. Wenn es um Python geht, gibt es jedoch eine Einschränkung bei dieser Redewendung, die zu unerwarteten Ergebnissen führen kann.
Bedenken Sie den folgenden Python-Code:
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
Dieser Code versucht, alle Elemente aus a zu entfernen Liste. Überraschenderweise ist die Ausgabe des Codes keine leere Liste, sondern enthält stattdessen alle anderen Elemente aus der Originalliste:
['b', 'd', 'f', 'h', 'j', 'l']
Erklärung
Der Grund dafür Das Verhalten liegt in Pythons Umgang mit Listenänderungen während der Iteration. In der Dokumentation heißt es eindeutig:
„Es ist nicht sicher, die Sequenz, über die in der Schleife iteriert wird, zu ändern. [...] Wenn Sie die Liste, über die Sie iterieren, ändern müssen, müssen Sie iterieren über eine Kopie.“
Im bereitgestellten Code versuchen wir, die Listenbuchstaben zu ändern, während wir darüber iterieren. Das Design von Python für den Umgang mit dieser Situation besteht darin, dass die Iteration mit dem Überspringen jedes zweiten Elements nach jedem Entfernen fortfährt.
Umschreiben des Codes
Um dieses Problem zu vermeiden, muss der Code sein umgeschrieben, um eine Kopie der Liste zu erstellen, bevor darüber iteriert wird. Es gibt mehrere Methoden, um dies zu erreichen:
Wenn das Ziel alternativ darin besteht, bestimmte Elemente basierend auf einer Bedingung zu entfernen, ist es effizienter, die Funktion filter() zu verwenden, um eine neue zu erstellen Liste, die nur die gewünschten Elemente enthält. Dieser Ansatz vermeidet die Notwendigkeit einer Iteration über eine Kopie der Originalliste.
Das obige ist der detaillierte Inhalt vonWarum das Iterieren und Entfernen aus einer Liste in Python zu unerwarteten Ergebnissen führen kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!