Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das Ändern einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?

Warum führt das Ändern einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 18:36:11945Durchsuche

Why Does Modifying a Python List During Iteration Lead to Unexpected Results?

Iterative Listenänderung in Python: Die Konsequenzen verstehen

In Python kann das Ändern einer Liste während der Iteration darüber zu unerwarteten Ergebnissen führen. Betrachten Sie den folgenden Code:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

Anstatt wie beabsichtigt Zahlen unter 20 zu entfernen, gibt dieser Code eine Liste aus, in der alle Zahlen unter 20 fehlen, zusammen mit 20 selbst.

Das Problem : Iterator-Positionsverschiebung

Das Problem ergibt sich aus der Tatsache, dass durch das Entfernen eines Elements aus einer Liste die Position nachfolgender Elemente verschoben wird. Mit fortschreitender Schleife sind die überprüften Elemente nicht mehr die erwarteten, da die entfernten Elemente „Löcher“ in der Liste erzeugen.

Zum Beispiel wird während der ersten Iteration 1 entfernt, bei der nächsten Iteration jedoch prüft nicht 2; Stattdessen wird 3 geprüft, da die Liste gekürzt wurde. Dieses Verhalten setzt sich fort und führt zu einer falschen Ausgabe.

Richtige Listenänderungstechniken

Um dieses Problem zu vermeiden, verwenden Sie alternative Methoden zum Ändern von Listen während der Iteration, wie zum Beispiel:

  • Liste Verständnis:
numbers = [n for n in numbers if n >= 20]
  • In-Place-Änderung:
numbers[:] = (n for n in numbers if n >= 20)
  • Aufzählung :
for i, n in enumerate(numbers):
    if n < 20:
        numbers[i] = None
numbers = [n for n in numbers if n is not None]

Diese Techniken tun es Ändern Sie die Länge der Liste während der Iteration nicht, um eine korrekte Elementverarbeitung und die gewünschte Ausgabe sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum führt das Ändern einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?. 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