Auswirkungen der Änderung von Listen während der Iteration
Beim Arbeiten mit Listen in Python ist es wichtig, bei der Änderung während der Iteration vorsichtig zu sein. Der Versuch, die ursprüngliche Liste beim Durchlaufen zu manipulieren, kann zu unvorhersehbaren Ergebnissen führen.
Betrachten Sie das folgende Codebeispiel:
l = range(100) for i in l: print(i) print(l.pop(0)) print(l.pop(0))
Sie können erwarten, dass dieser Code jedes Element in der Liste ausgibt und dann Entfernen Sie die ersten beiden Elemente und wiederholen Sie diesen Vorgang für die übrigen Elemente. Die tatsächliche Ausgabe wird jedoch von dieser Erwartung abweichen.
Der Grund für diese Anomalie liegt in der Änderung der Liste während der Iteration. Das Entfernen von Elementen aus der Liste mit l.pop(0) ändert deren Größe und Reihenfolge. Infolgedessen ist der Iterator i veraltet, was dazu führt, dass sich die Schleife unregelmäßig verhält.
Vermeiden von Listenänderungen während der Iteration
Um solche Probleme zu vermeiden, ist es ratsam, einen zu erstellen Kopieren Sie die Liste und iterieren Sie über die Kopie. Dadurch wird sichergestellt, dass die ursprüngliche Liste unverändert bleibt und der Iterator während der gesamten Schleife einen genauen Zugriff auf Elemente bietet.
Zum Beispiel zeigt der folgende Code diesen Ansatz:
l_copy = list(l) # Create a copy of l for i in l_copy: print(i) print(l.pop(0)) print(l.pop(0))
Nun die Ausgabe stimmt mit dem erwarteten Verhalten überein, da die ursprüngliche Liste l ihre Integrität behält, während die geänderte Kopie l_copy für die Iteration verwendet wird.
Alternativ, wie vorgeschlagen In der bereitgestellten Antwort können Sie eine While-Schleife mit einem Index verwenden, um die Iteration zu steuern und notwendige Änderungen an der ursprünglichen Liste innerhalb der Schleife vorzunehmen.
Das obige ist der detaillierte Inhalt vonWarum führt das Ändern einer Liste während der Iteration in Python zu unerwartetem Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!