2016-03-29 3 views
1

Wenn ich Iteration über mehrere Spalten in einer Reihe versuchen, hat die Spalte keine Änderung innerhalb einer verschachtelten Schleife:Iterate über mehrere Spalten in einer Liste der Listen in Python

i_rows = 4 
i_cols = 3 
matrix = [[0 for c in xrange(i_cols)] for r in xrange(i_rows)] 

for row, r in enumerate(matrix): 
    for col, c in enumerate(r): 
     r[c] = 1 

print matrix 

Beobachtete Ausgang

[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]] 

Erwartete Ausgabe

[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]] 

Ich habe verschiedene Ausdrücke wie xrange() und len() ausprobiert und erwäge, zu numpy zu wechseln. Ich bin etwas überrascht, dass ein zweidimensionales Array in Python nicht so intuitiv ist wie mein erster Eindruck von der Sprache.

Das Ziel ist ein zweidimensionales Array mit verschiedenen ganzzahligen Werten, die ich später analysieren muss, um 2D-Grafiken auf dem Bildschirm darzustellen.

Wie kann ich über Spalten in einer Liste von Listen iterieren?

Antwort

1

Sie haben nur den Wert gegen die col zuweisen, nicht c

for row, r in enumerate(matrix): 
    for col, c in enumerate(r): 
     r[col] = 1    # Note `col`, not `c` 

Da der erste von enumerate zurückgegebene Wert wird der Index und der zweite Wert sein wird, der tatsächliche Wert selbst sein.

+0

Das funktioniert! So nah ... Ich hatte 'row [col]' ohne Erfolg versucht. – noumenal

+1

@noumenal Yup, wieder das Gleiche :-) erster Wert ist der Index. So versucht 'row [col]' eine Nummer zu subskribieren. Deshalb hätten Sie einen Fehler erhalten. Versuchen Sie jedoch, List Comprehension so gut wie möglich zu verwenden. – thefourtheye

+0

Ich hatte nach den Dokumenten gesucht, wusste aber nicht, wie das Konzept genannt wurde. Es scheint sehr flexibel und Pythonic. – noumenal

Verwandte Themen