Bearbeiten einer verschachtelten Liste

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
FroxGame
User
Beiträge: 12
Registriert: Samstag 1. September 2018, 11:35

Hallo liebe Forumnutzer,
ich habe ein Problem mit verschachtelten Listen. Ich bekomme es einfach nicht hin, ein Element aus einer einzelnen Liste in der Liste zu bearbeiten. Ich habe schon im Internet gesucht und so gemacht, wie es da stand, aber es ging nicht.

Code: Alles auswählen

bretthoehe = 4
brettbreite = 4
count, value = 0,0
brett = [[0,1,0,1],[0,-1,0,-1],[1,1,1,1],[-1,-1,-1,-1]]
drawboard = [[" "]*brettbreite]*bretthoehe

for value in range(bretthoehe):
    for count in range(brettbreite):
        if brett[count][value] == 1:
            drawboard[count][value]="X"
        if brett[count][value] == -1:
            drawboard[count][value]="O"

print(drawboard)
Der Output ist dann folgender:

Code: Alles auswählen

[['O', 'O', 'O', 'O'],['O', 'O', 'O', 'O'],['O', 'O', 'O', 'O'],['O', 'O', 'O', 'O']]

Mein gewünschter Output ist aber folgender:

Code: Alles auswählen

[[' ','X',' ','X'],[' ','O',' ','O'],['X','X','X','X'],['O','O','O','O']]
Das liegt daran, dass die Elemente falsch verändert werden. Wenn ich das auch normal machen möchte, mit nur einer Änderung in einer Liste, dann ändert sich der Wert in jeder Liste, das ist halt das Problem. Kann mir da irgendjemand helfen? Danke im Vorraus.
P.S. Ich benutze Python auf Version 3.6 , falls das wichtig ist.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

versuchs mal so

Code: Alles auswählen

drawboard = [[" " for _ in range(brettbreite)] for _ in range(bretthoehe)]
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
FroxGame
User
Beiträge: 12
Registriert: Samstag 1. September 2018, 11:35

@ThomasL , dein Beitrag hat mir sehr geholfen. Vielen Dank!
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@FroxGame: mit Liste * Zahl erzeugst Du eine neue Liste, wo die selben Elemente n-mal in der Liste vorkommen. Also Deine Liste mit 4 Leerzeichenstrings ist vier mal in der Liste. Statt dessen willst Du aber 4 eigentständige Listen.

Statt aber Listen zu ändern, erzeugt man in Python neue Listen:

Code: Alles auswählen

SYMBOLS = {-1: "X", 1: "O", 0:" "}

brett = [[0,1,0,1],[0,-1,0,-1],[1,1,1,1],[-1,-1,-1,-1]]
draw_board = []
for row in brett:
    draw_row = []
    for cell in row:
        draw_row.append(SYMBOLS[cell])
    draw_board.append(draw_row)
print(drawboard)
oder als Listcomprehension

Code: Alles auswählen

draw_board = [
    [SYMBOLS[cell] for cell in row]
    for row in brett
]
FroxGame
User
Beiträge: 12
Registriert: Samstag 1. September 2018, 11:35

Vielen Dank Sirius3,
dass Du mich aufgeklärt hast und mir auch noch zusätzlich einige Zeilen Code erspart hast.
Antworten