Matrix...

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
Robinho
User
Beiträge: 4
Registriert: Freitag 2. Juni 2006, 12:09

Hallo,

ich habe leider in der Suchfunktion nichts gefunden, kann mir aber nicht vorstellen, dass dies hier ein neues Problem sein soll.

Code: Alles auswählen

matrix = [[0]*10]*10
c = 0
for m in range(0,10):
    for n in range(0,10):
        matrix[m][n] = c        
        c +=1        
print matrix
Ich möchte einer Matrix Werte (0 bis 99) zuweisen, habe da aber irgendwo einen Fehler drin, denn nach jeder Iteration der 2. For-Schleife wird die alte Zeile überschrieben.

Wo ist mein Denkfehler?!?

Danke für eure Hilfe :)
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Wo ist mein Denkfehler?!?
imho hier:

Code: Alles auswählen

matrix = [[0]*10]*10
ich verteile das mal auf mehrere zeilen:

Code: Alles auswählen

zeile = [0]*10
matrix = [ zeile ] * 10
Hier sieht man besser: deine matrix enthält 10 mal einen verweis auf die selbe Zeile. Du überschreibst also nicht die alte Zeile, du hast nur eine Zeile, die aber 10 mal.

erzeuge deine matrix so:

Code: Alles auswählen

[ [0] * 10 for i in range(10) ]
und es sollte funktionieren.
Robinho
User
Beiträge: 4
Registriert: Freitag 2. Juni 2006, 12:09

schau an... alles klar, vielen Dank! :)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Normalerweise ist es in Python garnicht notwendig, Listen zuerst in einer bestimmten Größe zu erstellen und dann zu füllen. Schneller gehts, wenn die Listen "on the fly" erstellt werden:

Code: Alles auswählen

matrix = []
c = 0
for m in range(10):
    l = []
    for n in range(10):
        l.append(c)
        c += 1
    matrix.append(l)
Aber: range() selbst erstellt ja schon eine Liste! Über die Zwischenstufe

Code: Alles auswählen

matrix = []
for m in range(10):
    matrix.append(range(m*10, (m+1)*10))
gelangt man dann zum Einzeiler:

Code: Alles auswählen

matrix = [range(m*10, (m+1)*10) for m in range(10)]
Antworten