Verstehen der Gefahren beim Ändern von Listen während der Iteration
Das Durchlaufen einer Liste, während Änderungen daran vorgenommen werden, kann aufgrund von Inkonsistenzen zwischen ihnen zu unerwartetem Verhalten führen den Zustand der Liste und das Verständnis des Iterators davon. Um dies zu veranschaulichen, betrachten Sie den folgenden Python-Code:
l = range(100) for i in l: print(i) print(l.pop(0)) print(l.pop(0))
Anstelle der erwarteten Ausgabe fortlaufender Zahlen erzeugt dieser Code ein eigenartiges Ergebnis. Der Grund liegt in der Tatsache, dass, während der Iterator die Liste l durchläuft, die Liste selbst geändert wird. Insbesondere entfernt die Methode pop(0) Elemente vom Anfang von l.
Um solche Inkonsistenzen zu verhindern, ist es wichtig, Änderungen am Container, auf dem iteriert wird, zu vermeiden. Eine gängige Lösung besteht darin, eine Kopie des Containers zu erstellen und die Kopie zu durchlaufen. In solchen Fällen, in denen das Ziel darin besteht, den ursprünglichen Container zu ändern, ist jedoch ein anderer Ansatz erforderlich.
Betrachten Sie den folgenden alternativen Code:
i = 0 while i < len(some_list): print(some_list[i]) print(some_list.pop(0)) print(some_list.pop(0)) i += 1
In diesem Code verwenden wir eine While-Schleife, um die Iteration manuell zu steuern. Anstatt die Liste direkt zu durchlaufen, verwenden wir einen Index i, um auf die Elemente zuzugreifen und dann Elemente manuell aus some_list zu entfernen. Dadurch wird sichergestellt, dass die Schleife auf die Aktualisierungen von some_list.
reagiertDas obige ist der detaillierte Inhalt vonWarum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!