Listen von Listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
capawe
User
Beiträge: 4
Registriert: Montag 11. November 2013, 17:11

Hallo,
ich habe das folgende Problem:
ich moechte eine liste mit listen erstellen, die ich in verschiedenen schleifen fuelle. dabei ist folgendes problem aufgetaucht.
Ich schiene irgendwie probleme zu haben richtig auf die indizes zuzugreifen, da jedesmal mehrere statt einem gesetzt werden.

Bsp:

Code: Alles auswählen

list_of_lists = [[]] * 4
list_of_lists[1].append("a")
print(list_of_lists)


list_of_lists_2 = [[None] * 5] * 3
list_of_lists_2[2][2] = "test"
print(list_of_lists_2)
Output:
[['a'], ['a'], ['a'], ['a']]
[[None, None, 'test', None, None], [None, None, 'test', None, None], [None, None, 'test', None, None]]
wobei ich eigentlich erwartet haette:
[ [], ['a'], [], [] ]
[[None, None, 'None, None, None], [None, None, None, None, None], [None, None, 'test', None, None]]
Kann mir jemand sagen was ich uebersehen habe?
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

"Multiplizieren" von Listen tut leider nicht das, was die meisten Leute (oder zumindest Anfänger) erwarten würden. Guckst du hier:

Code: Alles auswählen

>>> x = [[]] * 4
>>> x[0] is x[1] is x[2] is x[3]
True
Da wird also viermal exakt das selbe Listenobjekt in die "Oberliste" gesteckt. Jede Veränderungen führt dann dazu, dass alle 4 Listen verändert werden - eben weil das gar nicht 4 unterschiedliche Listen sind, sondern immer die selbe Liste ist.

Was du wohl eigentlich willst:

Code: Alles auswählen

>>> x = [list() for _ in range(4)]
>>> x[0].append(42)
>>> x
[[42], [], [], []]
capawe
User
Beiträge: 4
Registriert: Montag 11. November 2013, 17:11

sehr gut, danke.
hab das jetzt auch verstanden.
Antworten