2015-08-11 12 views
5

Voglio usare due for-loops all'interno di una list-comprehension, ma voglio usare il nome del secondo come indice del primo iterabile. Come lo posso fare?Come posso usare un nome annidato come l'indice __getitem__ del precedente iterabile nelle list comprehensions?

Esempio:

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

Errore:

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

risposta

5

Hai l'ordine dei for loop mescolati. Essi dovrebbero essere elencati in ordine di nidificazione , lo stesso ordine devi usare se hai scritto i cicli normalmente:

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

In caso di dubbio, scrivere i loop come ci si scrive di loro in caso di dichiarazione. Il tuo elenco di comprensione cercato di fare questo:

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

che lo rende più evidente che si è tentato di accedere i prima definito esso.