Seite 1 von 1

Anfänger braucht Hilfe:Listen initialisieren

Verfasst: Mittwoch 10. September 2008, 22:46
von hbral
Hallo

Ich habe folgendes Problem.
Ich kenne Java und möchte gerne Python kennenlernen.

Wenn ich in Java ein Array initialisiere kann ich das ja so machen:
int[][] array = new int[8][8] oder so ähnlich

in Python hab ich irgendwo aufgeschnappt kann man das mit einer Liste so machen:

array = [[0] * 8] * 8

nun ist mir aber aufgefallen, dass die einzelnen Reihen abhängig voneinander sind.

zb array[0][1] = 1
weist auch array[1][1] den Wert eins zu
und auch array[2][1] ... usw

also kann mir Jemand nen Tip geben wie die Liste initialisieren kann ohne die Abhängigkeit

Verfasst: Donnerstag 11. September 2008, 05:53
von Pumeluk2
Wie wäre es damit:

Code: Alles auswählen

array = [[0 for i in xrange(8)] for i in xrange(8)]
Das was du erzeugst ist kein zweidimensionales array, sondern 8 mal das gleiche eindimensionale array. Deshalb die "Abhängigkeit".

Verfasst: Donnerstag 11. September 2008, 06:45
von BlackJack
Die innere "list comprehension" kann man weglassen und statt dessen die Multiplikation verwenden. Das erzeugt zwar Referenzen auf die selbe 0, aber da `int`-Ojekte unveränderbar sind, macht das nichts:

Code: Alles auswählen

In [368]: a = [[0] * 8 for dummy in xrange(8)]

In [369]: a[2][3] = 42

In [370]: a
Out[370]:
[[0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 42, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0]]

Verfasst: Donnerstag 11. September 2008, 16:49
von hbral
vielen Dank, hat mir sehr geholfen

Verfasst: Donnerstag 11. September 2008, 17:17
von nemomuk

Code: Alles auswählen

a = [[0]*8]*8
Was spricht dagegen?

ich verstehe...

hatte leider nicht richtig gelesen...