liste.append in for Schleife
Verfasst: Dienstag 4. August 2020, 17:31
Hallo zusammen,
ich bin neu hier und traue mich mal, eine vermutlich sehr simple Frage zu stellen, die mich aber seit einiger Zeit beschäftigt.
wenn ich eine Liste durch die .append Funktion an eine (zunächst leere) Liste anhänge:
so erhalte ich als Ergebnis:
Wenn ich im Nachhinein die zweite Liste verändere, also und mir dann wieder die erste Liste ausgeben lasse
erhalte ich nach wie vor
Soweit, so logisch. Er hat den Inhalt der Variable l2 in die Liste l1 gespeichert. Ein nachträgliches Ändern der Liste l2 ändert nichts am Inhalt von l1.
Wenn ich das gleiche aber in einer For-Schleife mache:
dann bekomme ich als Ergebnis:
Python erweitert die Liste l1 also immer um den aktuellen Stand von l2 (abhängig von i), aber er ersetzt auch die bereits existierenden Listenelemente durch die neue Version.
Wenn ich die Liste in einer Variablen zwischenspeichere und sie vorher in eine Liste konvertriere, funktiert es:
Hier kommt
raus, also das was ich eigentlich erwartet habe.
Das list() macht ja aus dem Argument eine Liste. Aber gemäß type(l2) und type(l_help) sind beide bereits vom Typ Liste.
Ich habe die "Lösung" für mein Problem also im Prinzip gefunden, aber ich würde gerne verstehen, warum Python so tut wie es tut. Vielleicht kann mir jemand weiterhelfen.
Vielen Dank schon mal.
ich bin neu hier und traue mich mal, eine vermutlich sehr simple Frage zu stellen, die mich aber seit einiger Zeit beschäftigt.
wenn ich eine Liste durch die .append Funktion an eine (zunächst leere) Liste anhänge:
Code: Alles auswählen
l1 = []
l2 = [2]
l1.append(l2)
l1
Code: Alles auswählen
out: [[2]]
Code: Alles auswählen
l2 = [3]
l1
Code: Alles auswählen
out: [[2]]
Wenn ich das gleiche aber in einer For-Schleife mache:
Code: Alles auswählen
l1 = []
l2 = []
for i in range(3):
l2.append(i)
l1.append(l2)
l1
Code: Alles auswählen
Out: [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
Wenn ich die Liste in einer Variablen zwischenspeichere und sie vorher in eine Liste konvertriere, funktiert es:
Code: Alles auswählen
l1 = []
l2 = []
for i in range(3):
l2.append(i)
l_help = list(l2)
l1.append(l_help)
l1
Code: Alles auswählen
Out: [[0], [0, 1], [0, 1, 2]]
Das list() macht ja aus dem Argument eine Liste. Aber gemäß type(l2) und type(l_help) sind beide bereits vom Typ Liste.
Ich habe die "Lösung" für mein Problem also im Prinzip gefunden, aber ich würde gerne verstehen, warum Python so tut wie es tut. Vielleicht kann mir jemand weiterhelfen.
Vielen Dank schon mal.