[PYTHON] Wenn Sie die Liste entfernen, die geloopt werden soll, werden Sie schrecklich.

Ursprung

Eines Tages, als ich Python-Code schrieb, passierte etwas Seltsames ...

x = [1, 2, 3, 4, 5]
for i in x:
    x.remove(i)
    print(x)

>>>
[2, 3, 4, 5]  #Verstehen
[2, 4, 5]  # ???Wenn Sie 1 und 2 herausziehen[3, 4, 5]Dann!?!?
[2, 4]  # ???????

Übrigens war es das gleiche, als ich es mit Rubin versuchte.

x = [1, 2, 3, 4, 5]
for i in x do
  x.delete(i)
  print(x)
end

>>>
[2, 3, 4, 5][2, 4, 5][2, 4] => [2, 4]

Hallo, "für i in x" bedeutet

Es scheint, dass es versucht, jedes Mal, wenn die Schleife wiederholt wird, auf die 0, 1, 2, ..., n-ten von x zu verweisen.

Gegenmaßnahmen

Es ist gut, die Liste mit [:] oder copy () zu kopieren.

x = [1, 2, 3, 4, 5]
for i in x[:]:
    x.remove(i)
    print(x)

>>>
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
from copy import copy

x = [1, 2, 3, 4, 5]
for i in copy(x):
    x.remove(i)
    print(x)

>>>
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]

Nachwort

Ich war ungefähr 30 Minuten besorgt, "Hmm, hmm ...". Wenn Sie es mit numpy drücken, werden Sie durch die destruktive Methode der Standardliste verwirrt ...

Recommended Posts

Wenn Sie die Liste entfernen, die geloopt werden soll, werden Sie schrecklich.
Wenn Sie View decorator in urls.py in Django schreiben, ist die Liste höher.
Was zu tun ist, wenn Sie sich über "Umkehrungen" ärgern, muss eine 2D-Liste sein ... im matplotlib-Pfeil
Was tun, wenn bei der Installation von CentOS auf VirtualBox die Meldung "Die Sitzung konnte nicht geöffnet werden" angezeigt wird
Was tun, wenn der Fehler angezeigt wird? Das Ziel-WSGI-Skript '/ var / www / xxx / xxx.wsgi' kann nicht als Python-Modul geladen werden
Wenn Sie sudo in Ubuntu hinzufügen, wird es als Standardpython bezeichnet.
Wenn in der Funktion eine Ausnahme auftritt, wird diese an den Anrufer 2 übertragen
Wenn in der Funktion eine Ausnahme auftritt, wird diese an den Anrufer 1 übertragen
[Python] So entfernen Sie doppelte Werte aus der Liste
Wenn Sie den Fehler "Basismatrix ist singulär zur Arbeitsgenauigkeit" in GLPK erhalten
Die Programmiersprache, die Sie verwenden möchten
Was tun, wenn bei Verwendung von ts-node-dev unter Linux der Fehler "ERR_FEATURE_UNAVAILABLE_ON_PLATFORM" angezeigt wird?
[Python] Wenn Sie eine Datei mit demselben Namen wie das zu importierende Modul erstellen, tritt ein Attributfehler auf.
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Python] Es kann nützlich sein, die Datenrahmen aufzulisten
Was tun, wenn die Paketabhängigkeit nicht repariert werden kann?
Was tun, wenn Overalls "Abdeckung unbekannt" werden?
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Wenn Sie möchten, dass Ihre Kollegen dieselbe Sprache verwenden
Was tun, wenn bei der Installation von wxPython unter Mac OS X die Meldung "~ .pkg" beschädigt wird und nicht geöffnet werden kann?
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Was tun, wenn in Python minus Null angezeigt wird?
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Was tun, wenn bei der Pip-Installation ein Unicode-Dekodierungsfehler auftritt?
Was tun, wenn Sie den Papierkorb in Lubuntu 18.04 nicht verwenden können?
Stellen Sie sicher, dass Python eine Zeichenfolge in int konvertieren / konvertieren kann
Was tun, wenn "Ich kann die Site nicht sehen !!!!"
So finden Sie heraus, wann Sie das Java-Installationsverzeichnis nicht kennen
Was tun, wenn bei Verwendung von Python mit der NetBeans-IDE die Warnung "Falsche Python-Plattform" angezeigt wird?
Wenn Sie nur die Dump-Datei des Servers abrufen möchten, war es praktisch, einen http-Server zu erstellen
So erhalten Sie die Python-Version
Wenn Sie Titanic fahren ... sterben Sie.
Wenn Sie awsebcli in CircleCI aufnehmen möchten, geben Sie die Python-Version an
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Ich habe 6 Methoden gemessen, um den Index des Maximalwerts (Minimalwerts) der Liste zu erhalten
Was tun, wenn Sie sich mit FileNotFoundError in der Dateireferenz verlieren?
Was tun, wenn Sie sich über TensorFlow v2 ohne Attribut 'app' ärgern?
Was tun, wenn Sie während der Anaconda-Installation unter Linux nicht weiterkommen?
Wenn Sie mehrere Statistiken mit groupby of pandas v1 erhalten möchten
Was tun, wenn TypeError in min und max von numpy auftritt?
Was tun, wenn beim Laden von mnist eine Fehlermeldung angezeigt wird?
Ist Qt nicht die stärkste Bibliothek für die einfache Ausgabe von SVG?
Holen Sie sich den Songtitel aus dem Titel des von Ihnen gesungenen Videos
Was tun, wenn Sie URL 443 mit pip nicht abrufen konnten?
Wenn in boto3 der Fehler no attribute angezeigt wird, überprüfen Sie die Version