2016-03-29 1 views
1

Lorsque je tente itération à travers les colonnes d'une ligne, la colonne ne pas de changement dans une boucle imbriquée:Itérer sur plusieurs colonnes dans une liste des listes en 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 

sortie Observé

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

sortie prévue

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

J'ai essayé différentes expressions telles que xrange() et len() et j'envisage de passer à numpy. Je suis un peu surpris qu'un tableau bidimensionnel en Python ne soit pas aussi intuitif que ma première impression de la langue.

Le but est un tableau à deux dimensions avec des valeurs entières variables, que j'ai besoin d'analyser par la suite pour représenter les graphiques 2D sur l'écran.

Comment puis-je parcourir plusieurs colonnes dans une liste de listes?

Répondre

1

Il vous suffit d'attribuer la valeur par rapport au col, non c

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

Parce que la première valeur retournée par enumerate sera l'index et la deuxième valeur sera la valeur réelle elle-même.

+0

Cela fonctionne! Si proche ... J'avais essayé 'row [col]' sans succès. – noumenal

+1

@noumenal Yup, encore une fois la même chose :-) La première valeur est l'indice. Donc 'row [col]' essaie d'inscrire un nombre. C'est pourquoi vous auriez reçu une erreur. Mais, essayez d'utiliser List Comprehension autant que possible. – thefourtheye

+0

Je cherchais les docs sur ce sujet, mais je ne savais pas comment s'appelait le concept. Il semble très flexible et Pythonic. – noumenal