Seite 1 von 1

Matrix...

Verfasst: Mittwoch 16. August 2006, 11:22
von Robinho
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 :)

Verfasst: Mittwoch 16. August 2006, 11:32
von keppla
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.

Verfasst: Mittwoch 16. August 2006, 11:49
von Robinho
schau an... alles klar, vielen Dank! :)

Verfasst: Mittwoch 16. August 2006, 12:27
von birkenfeld
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)]