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!
Listen in einer Liste
-
- User
- Beiträge: 14
- Registriert: Freitag 20. November 2015, 11:02
Ja, stimmt.
Meine Grundmatrix sieht wie folgt aus:
M = [[' ']*7]*6
Und eine Funktion in dem Programm:
Ich will ein Vier-Gewinnt-Spiel erstellen...
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das Problem liegt darin wie du `M` erzeugst. Die inneren Listen sind immer diesselbe:
stattdessen:
Daneben benutzt man (wenn man denn einen braucht) `None` als Platzhalter.
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
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
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 14
- Registriert: Freitag 20. November 2015, 11:02
Ah, danke sehr!
Erscheint mir logisch.
Erscheint mir logisch.
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.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"