Heim  >  Artikel  >  Backend-Entwicklung  >  Warum das Iterieren und Entfernen aus einer Liste in Python zu unerwarteten Ergebnissen führen kann

Warum das Iterieren und Entfernen aus einer Liste in Python zu unerwarteten Ergebnissen führen kann

Patricia Arquette
Patricia ArquetteOriginal
2024-10-19 09:55:30345Durchsuche

Why Iterating and Removing from a List in Python Can Cause Unexpected Results

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:

  • del Buchstaben[:]: Entfernt alle Elemente aus der Liste und ersetzt sie effektiv durch eine leere Liste.
  • Buchstaben[:] = []:Ähnlich wie del Buchstaben[:], generiert jedoch eine neue leere Liste, anstatt das Original zu ändern.
  • Buchstaben = []: Weist den variablen Buchstaben eine völlig neue leere Liste zu.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn