Seite 1 von 1

Listen von Listen

Verfasst: Donnerstag 14. November 2013, 18:17
von capawe
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?

Re: Listen von Listen

Verfasst: Donnerstag 14. November 2013, 18:24
von snafu
"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], [], [], []]

Re: Listen von Listen

Verfasst: Donnerstag 14. November 2013, 18:35
von capawe
sehr gut, danke.
hab das jetzt auch verstanden.