Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das Entfernen von Elementen aus einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?

Warum führt das Entfernen von Elementen aus einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-04 18:11:12936Durchsuche

Why Does Removing Elements from a Python List During Iteration Produce Unexpected Results?

Aus einer Liste entfernen, während darüber iteriert wird

Beim Iterieren über eine Liste und dem Entfernen von Elementen kann das Verhalten von Python rätselhaft sein. Der Codeausschnitt unten:

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)

Gibt [0, 2, 3, 5, 6, 8, 9] anstelle des erwarteten [0, 2, 4, 6, 8] aus.

Verstehen des iterativen Entfernungsverhaltens

Diese Ausgabe ergibt sich aus dem Art und Weise, wie Python während der Iteration mit veränderlichen Sequenzen umgeht. Wenn „remove“ aufgerufen wird, wird die zugrunde liegende Liste geändert. Der Iterator bleibt jedoch derselbe und durchläuft weiterhin die geänderte Liste.

Das folgende Diagramm veranschaulicht den Entfernungsprozess:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 0; remove? no
 ^
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 1; remove? yes
    ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 3; remove? no
       ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 4; remove? yes
          ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 6; remove? no
             ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 7; remove? yes
                ^
[0, 2, 3, 5, 6, 8, 9]                <-  b = 9; remove? no
                   ^

Beantwortung der verbleibenden Fragen

  1. Fehleranzeige: Python gibt keinen Fehler aus, weil dies der Fall wäre einen Laufzeit-Overhead verursachen. Es wird davon ausgegangen, dass der Programmierer die Konsequenzen einer Änderung der Liste während der Iteration kennt und entsprechend damit umgeht.
  2. Historisches Verhalten: Dieses Verhalten existiert in Python seit frühen Versionen (mindestens 1.4) und stimmt mit der Art und Weise überein, wie veränderliche Sequenzen typischerweise implementiert werden.

Das obige ist der detaillierte Inhalt vonWarum führt das Entfernen von Elementen aus einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn