Anfänger braucht Hilfe:Listen initialisieren

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
hbral
User
Beiträge: 5
Registriert: Mittwoch 10. September 2008, 16:36

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
Pumeluk2
User
Beiträge: 26
Registriert: Samstag 24. März 2007, 11:24

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".
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]]
hbral
User
Beiträge: 5
Registriert: Mittwoch 10. September 2008, 16:36

vielen Dank, hat mir sehr geholfen
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

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

ich verstehe...

hatte leider nicht richtig gelesen...
Antworten