Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen?
Ändern einer Liste während der Iteration
Der bereitgestellte Codeausschnitt zeigt unerwartetes Verhalten beim Ändern einer Liste während des Durchlaufens:
l = range(100) for i in l: print i, print l.pop(0), print l.pop(0)
Die Ausgabe dieses Codes unterscheidet sich von dem, was man erwarten könnte, da sich die Änderung der Liste (durch Einfügen von Elementen) auf die auswirkt Iterator. Wenn ein Iterator für eine Liste erstellt wird, verfolgt er die aktuelle Position innerhalb der Liste. Wenn Elemente aus der Liste entfernt werden, wird die Position des Iterators entsprechend angepasst. Wenn die Liste jedoch während der Iteration geändert wird, wird die Position des Iterators ungültig und es können unvorhersehbare Ergebnisse auftreten.
In diesem speziellen Fall soll die Schleife die Elemente in der Liste l durchlaufen . Wenn jedoch ein Element aus der Liste entfernt wird, wird die Position des Iterators verschoben, sodass er das nächste Element in der Liste überspringt. Infolgedessen durchläuft die Schleife nur die Hälfte der Elemente der ursprünglichen Liste.
Um dieses Verhalten zu vermeiden, ist es wichtig, den Container, über den iteriert wird, niemals zu ändern. Stattdessen sollte man eine Kopie des Containers erstellen und darüber iterieren. Dies kann erreicht werden, indem die Liste vor dem Starten der Schleife kopiert wird:
l_copy = l[:] for i in l_copy: print i, print l.pop(0), print l.pop(0)
Alternativ kann man anstelle einer for-Schleife eine while-Schleife verwenden, die einen separaten Index für die aktuelle Position innerhalb der Liste verwaltet:
i = 0 while i < len(l): print i, print l.pop(0), print l.pop(0) i += 1
Das obige ist der detaillierte Inhalt vonWarum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!