Seite 1 von 1
Listen in einer Liste
Verfasst: Freitag 20. November 2015, 11:14
von Chemical Bro
Hallo ich bin neu hier!
Freut mich euch kennenzulernen!
Ich hab ein kleines Problem bei meinem Programm:
Wenn ich einen einzelnen Eintrag in einer Liste von Listen ändern will,
also bsw. M[0][3] = 'X',
dann wird anstatt nur den 3. Eintrag in der 0. Liste zu ändern
der 3. Eintrag von jeder Liste in der Liste geändert.
Wie kann ich nun also einen Eintrag in nur einer Liste innerhalb der Liste ändern
ohne die anderen Einträge an der gleichen Stelle in den anderen Listen
zu ändern?
Ich freue mich auf eure Hilfe!
Re: Listen in einer Liste
Verfasst: Freitag 20. November 2015, 11:23
von Sirius3
@Chemical Bro: ein vollständig lauffähiges Beispiel wäre schön. Dann bräuchte man nicht raten, was Du falsch machst. Statt n-mal die gleiche Liste in M zu haben, solltest Du n verschiedene Listen erzeugen.
Re: Listen in einer Liste
Verfasst: Freitag 20. November 2015, 11:27
von Chemical Bro
Ja, stimmt.
Meine Grundmatrix sieht wie folgt aus:
M = [[' ']*7]*6
Und eine Funktion in dem Programm:
Code: Alles auswählen
def neueMatrix(M,c):
for i in range(6):
if M[i][c] == ' ':
M[i][c] = 'X'
break
return M
Ich will ein Vier-Gewinnt-Spiel erstellen...
Re: Listen in einer Liste
Verfasst: Freitag 20. November 2015, 12:07
von cofi
Das Problem liegt darin wie du `M` erzeugst. Die inneren Listen sind immer diesselbe:
Code: Alles auswählen
In [1]: M = [[' ']*7]*6
In [2]: M
Out[2]:
[[' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ']]
In [3]: for x in M:
...: print(id(x))
...:
140645952792840
140645952792840
140645952792840
140645952792840
140645952792840
140645952792840
stattdessen:
Code: Alles auswählen
In [4]: M = [[None for i in range(7)] for j in range(6)]
In [5]: for x in M:
print(id(x))
...:
140645952764240
140645952762080
140645952638848
140645952762872
140645952638920
140645952638776
Daneben benutzt man (wenn man denn einen braucht) `None` als Platzhalter.
Re: Listen in einer Liste
Verfasst: Freitag 20. November 2015, 12:35
von Chemical Bro
Ah, danke sehr!
Erscheint mir logisch.
Re: Listen in einer Liste
Verfasst: Freitag 20. November 2015, 12:36
von bwbg
Alternativ bietet sich ein defaultdict statt einer mehrdimensionalen Liste an. Schlüssel wäre ein 2-tupel (x, y). Das kommt aber auf den Anwendungsfall an.