Problem mit Listen --> einfach

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
Gast

grüße,

Code: Alles auswählen

container = []
row = []
for i in range(4):
    row.append('x')
for i in range(4):
    container.append(row)

container[0][0] = 'STEHT NICHT NUR AN 0.0'
container
Wie ließe sich das beheben? Ich hätte es gern so, dass ich exakt einen Slot mit neuem Inhalt belege. Und eben nicht die ersten slots von jeder reihe...
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Du belegst jedes einzelne Feld mit der selben Liste (also dem selben Listenobjekt, nämlih row, was Du nur einmal initialisierst).

Folgendes Beispiel macht eine neue Liste für jede Zeile:

Code: Alles auswählen

rows, cols = 10, 10
container = [['x']*cols for n in range(rows)]

# Erstes ist row, zweites column.
container[0][0] = "hello"
container[0][1] = "blah"
container[1][0] = "test"
print container
--- Heiko.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Wie modelnine schon erwähnt hat, nimmst du für alles die gleiche Liste.


Row enthält eine Referenz, und natürlich immer die gleiche.

Deswegen füllt sich auch alles, wenn du über eine der vielen Referenzen, die selbe Liste änderst.
Gast

vielen dank, klappt wunderbar. :)
Antworten