Ich versuche den Inhalt einer Liste auf einen anderen zu übertragen, aber es funktioniert nicht und ich weiß nicht warum. Mein Code sieht so aus:
%Vor%Aber wenn ich es ausführe, sieht meine Ausgabe so aus:
%Vor%Meine Frage ist dreifach, denke ich: Warum passiert das, wie kann ich es zum Laufen bringen, und übersehe ich eine unglaublich einfache Lösung wie eine 'Move'-Anweisung oder etwas?
Der Grund ist, dass Sie entfernen aus der ersten Liste hinzufügen und verkleinern. Der Iterator stoppt also, bevor die gesamte Liste durchschritten werden kann.
Um zu erreichen, was Sie wollen, tun Sie dies:
%Vor% Die list1[start:end:step]
ist die Slicing-Syntax : Wenn Sie start leer es ist standardmäßig 0, wenn Sie end leer lassen ist es der höchstmögliche Wert. Also list1 [:] bedeutet alles darin . (Danke an Wallacoloo)
Wie einige Leute gesagt haben, könntest du auch die extend
-Methode des list
-Objekts benutzen, um die eine Liste in eine andere zu kopieren, wenn das deine Absicht war. (Aber ich habe den obigen Weg gewählt, weil dies nahe an Ihrer Annäherung ist.)
Da Sie Python neu kennen, habe ich etwas für Sie: Tauchen Sie ein in Python 3 - es ist kostenlos und einfach. - Viel Spaß!
Sie löschen Elemente aus list1, während Sie darüber iterieren.
Das verlangt Ärger.
Versuchen Sie Folgendes:
%Vor% Essential Debugging Skill: Fügen Sie print
Anweisungen hinzu. (oder print
funktioniert in Python 3)
Beachten Sie, dass Python versucht, die Positionen der Liste zu durchlaufen, aber Sie entfernen weiterhin Elemente aus der Liste, wodurch die Positionen bedeutungslos werden.
Python wählt das Element an der Position 0 aus der Liste aus.
Sie entfernen dann das Element und ändern die Liste.
Python wählt dann das Element an Position 1 aus der Liste aus (scheint ein Element zu überspringen)
Sie entfernen dann dieses Element und ändern die Liste.
Python wählt dann das Element an Position 2 aus der Liste aus (scheint ein Element zu überspringen)
Sie entfernen dann das Element und ändern die Liste.
Python möchte dann den Gegenstand an Position 3 auswählen, aber es gibt keinen solchen Gegenstand. Also stoppt die Schleife.
Sie sollten eine Liste nicht ändern, während Sie darüber iterieren. Dies führt dazu, dass der Iterator auf das falsche Element zeigt. Nachdem das erste Element behandelt wurde, zeigt der Iterator auf index = 1, aber da Sie ein Element entfernt haben, befindet sich das nächste Element jetzt auf dem Index Null und wird daher übersprungen. Deshalb behandeln Sie nur jeden anderen Gegenstand.
Versuchen Sie:
%Vor%Genau wie ChristopheD sagt.
Könnte Folgendes tun:
%Vor%Damit wird list1 gelöscht.
Bearbeiten Er / sie hat ihren Beitrag aktualisiert. Ich werde das als eine leichte Alternative auslassen.
Es gibt auch die einfache Kopierfunktion (oder deepcopy, wenn Sie komplexe Objekte und nicht nur ganze Zahlen in Ihrer Liste haben):
%Vor%Sie können eine angemessenere Antwort erhalten, wenn Sie erklären, was Sie erreichen möchten (es sei denn, Sie lernen gerade etwas über Python-Listen).
"Variablen" in Python sind nur Namen / Referenzen, so dass die zerstörerische Kopie, die Sie scheinbar tun möchten, irgendwie seltsam erscheint. Wenn Sie möchten, dass list2 dieselben Werte wie list1 hat, können Sie einfach Folgendes tun:
%Vor%Und wenn Sie danach list1 für etwas anderes verwenden möchten, können Sie einfach Folgendes tun:
%Vor%Verwenden eines Listenverständnisses:
%Vor% Binden Sie den Namen list2
an das gleiche Objekt wie list1
:
(Wenn Sie den Inhalt von list1
ändern, wird list2
entsprechend geändert.)
Erstellen Sie eine Kopie von list1
und binden Sie sie an den Namen list2
:
In diesem Fall sind list1 und list2 verschiedene Objekte.
Wie Sie in anderen Antworten sehen können, versuchen Sie, die Liste zu ändern, während Sie darüber iterieren. Dies funktioniert nicht. Es gibt viele Möglichkeiten, eine Liste in eine andere zu kopieren. Ich habe einige Tests durchgeführt, um zu sehen, wie schnell jeder Ansatz ist:
%Vor%Die Slice-Syntax ist die schnellste. Es ist viel schneller als ein Listenverständnis.
Um eine Liste zu löschen, können Sie verwenden:
%Vor%@potatoubed: Viele der gegebenen Antworten lösen das triviale Beispiel, das Sie angegeben haben ("move list1 to list2"), erklären aber nicht wirklich das "warum" des tieferen Problems, das eine Liste verändert, wenn Sie iterieren es. Studiere S. Lotts Antwort ...