2016-03-29 13 views
1

ben arka arkaya sütunlar arasında yineleme girişiminde, sütun iç içe geçmiş bir döngü içinde değişiklik yapar:Bıkmadan

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 

Gözlemlenen çıkışı

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

Beklenen çıkış

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

xrange() ve len() gibi farklı ifadeleri denedim ve numpy'ye geçmeyi düşünüyorum. Python'daki iki boyutlu bir dizinin, dil hakkındaki ilk izlenimim kadar sezgisel olmadığına biraz şaşırdım.

Amaç, daha sonra ekranda 2B grafikleri temsil etmek üzere ayrıştırmak zorunda olduğum değişken tamsayı değerlerine sahip iki boyutlu bir dizidir.

Listeler listesinde sütunlar arasında nasıl yineleyebilirim?

cevap

1

sadece enumerate tarafından döndürülen ilk değer endeksi olacak ve ikinci değer gerçek değer kendisi olacağı için değil c

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

, col karşı değer atamak zorundayız.

+0

Bu çalışır! O kadar yakın ... Ben [col] 'i başarıyla denedim. – noumenal

+1

@noumenal Yup, yine aynı şey :-) ilk değer dizindir. Yani satır [col] 'bir sayıya abone olmayı dener. Bu yüzden bir hata aldınız. Ancak, List Comprehension'ı mümkün olduğunca kullanmaya çalışın. – thefourtheye

+0

Bu konuda dokümanlar arıyordum, ama konseptin ne arandığını bilmiyordum. Çok esnek ve Pythonic gibi görünüyor. – noumenal