Iterationsänderung beim Entfernen einer Liste verstehen
Der folgende Python-Code soll alternative Elemente aus einer Liste entfernen:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
Es wird jedoch eine unerwartete Ausgabe von [0, 2, 3, 5, 6, 8, 9] anstelle von [0, 2, 4, 6, 8]. Dies liegt an der dynamischen Natur des Iterationsprozesses.
Warum die Ausgabewerte [0, 2, 3, 5, 6, 8, 9] sind:
Während die Schleife die Elemente in a durchläuft, ändert sie die Liste, indem sie bestimmte Elemente entfernt. Dies wirkt sich auf den zugrunde liegenden Iterator aus und erklärt das Entfernungsmuster in der Ausgabe. Hier ist eine Schritt-für-Schritt-Aufschlüsselung:
Kein Fehler Nachricht:
Python gibt keinen Fehler bezüglich des geänderten Iterators aus, da die Sprache die Leistung priorisiert. Das Erkennen und Behandeln aller möglichen Iterationsänderungen würde einen erheblichen Mehraufwand verursachen. Daher bevorzugt Python in diesen Situationen die Laufzeitgeschwindigkeit gegenüber expliziten Fehlermeldungen.
Konsistenz mit früheren Python-Versionen:
Das hier beschriebene Verhalten war in allen Python-Versionen konsistent zurück zu 1.4. Es ist ein wesentliches Merkmal veränderlicher Sequenzimplementierungen, Iterationsänderungen auf diese Weise zu handhaben.
Das obige ist der detaillierte Inhalt vonWarum führt das Entfernen von Elementen aus einer Liste während der Iteration in Python zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!