Unerwartetes Verhalten: Elemente aus einer Liste während der Iteration entfernen
Beim Versuch, eine Liste zu durchlaufen und bestimmte Elemente zu entfernen, die bestimmte Kriterien erfüllen, Wenn die Liste während des Iterationsprozesses geändert wird, kann ein unerwartetes Verhalten auftreten. Betrachten Sie den folgenden Python-Code:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
Überraschenderweise ist das erhaltene Ergebnis:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Wir würden erwarten, dass die Zahlen unter 20 entfernt werden, aber sie bleiben im Ergebnis. Dies liegt daran, dass die Liste während der Iteration geändert wird. Wenn das erste Element, 1, entfernt wird, verschiebt sich die Position der nachfolgenden Elemente und die Schleife fährt mit dem nächsten Element in der geänderten Liste fort, das nicht das erwartete ist.
Um dieses Problem genau zu lösen Beim Durchlaufen der Liste können wir Listenverständnisse oder direkte Änderungen verwenden. Listenverständnisse ermöglichen es uns, eine neue Liste nur mit den Elementen zu erstellen, die die angegebene Bedingung erfüllen:
numbers = [n for n in numbers if n >= 20]
Alternativ kann eine direkte Änderung mithilfe der Slice-Zuweisung durchgeführt werden:
numbers[:] = (n for n in numbers if n >= 20)
Durch die Änderung der Liste auf diese Weise wird die Iteration nicht beeinträchtigt und das gewünschte Ergebnis kann erzielt werden.
Das obige ist der detaillierte Inhalt vonWarum führt das Entfernen von Listenelementen während der Iteration in Python zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!