2015-08-11 14 views
5

Liste anlaşmasında iki for döngüsü kullanmak istiyorum, ancak ikincinin adını ilk yinelenebilirliğin bir dizini olarak kullanmak istiyorum. Bunu nasıl yapabilirim?İç içe geçmiş bir adı, liste anlamaları içindeki önceki yinelenebilirliğin __getitem__ dizini olarak nasıl kullanabilirim?

Örnek:

l = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
[x for x in l[i] for i in range(len(l))] 

Hata:

Traceback (most recent call last): 
    File "python", line 2, in <module> 
NameError: name 'i' is not defined 

cevap

5

Sen karışık senin for döngüler sırasına sahiptir. ifadelerini kullanırken bunları yazacağımı gibi

[x for i in range(len(l)) for x in l[i]] 

Şüphe, döngüler yazmak: Bunlar yuvalama sırayla, normalde döngüler yazdım eğer kullanacağınız aynı sırada listelenmesi gerekir. Bunu tanımlanan önce i erişmeye çalıştı o daha belirgin hale getirir

for x in l[i]: 
    for i in range(len(l)): 
     x 

: Listeniz anlama bunu çalıştı.