Supongamos que tengo una lista como esta:
mylist = ["a","b","c","d"]
Para obtener los valores impresos junto con su índice, puedo usar la enumerate
función de Python como esta
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Ahora, cuando trato de usarlo dentro de un list comprehension
me da este error
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Entonces, mi pregunta es: ¿cuál es la forma correcta de usar la comprensión de enumerar dentro de la lista?
python
list
iteration
list-comprehension
RanRag
fuente
fuente
,
no al()
. "Poneri,j
dentro de una tupla" no tiene sentido, ¡ya quei,j
es una tupla! El problema es que el analizador de listas de compilación necesita los parens para el grupo de instrucciones.Para ser realmente claro, esto no tiene nada que ver
enumerate
y todo que ver con la sintaxis de comprensión de listas.Esta comprensión de la lista devuelve una lista de tuplas:
esta es una lista de dictados:
una lista de listas:
Un error de sintaxis:
Lo cual es inconsistente (en mi humilde opinión) y confuso con la sintaxis de comprensión del diccionario:
Y un conjunto de tuplas:
Como dijo Óscar López, puede pasar la tupla de enumeración directamente:
fuente
O, si no insiste en usar una lista de comprensión:
fuente
Si está utilizando listas largas, parece que la comprensión de la lista es más rápida, sin mencionar que es más legible.
fuente
[t for t in enumerate(my list)]
es aún más rápido.Aquí hay una manera de hacerlo:
Alternativamente, puedes hacer:
La razón por la que obtuvo un error fue porque le faltaba el ()
i
yj
para convertirlo en una tupla.fuente
Sé explícito sobre las tuplas.
fuente
Toda gran respuesta chicos. Sé que la pregunta aquí es específica para la enumeración, pero ¿qué tal algo como esto, solo otra perspectiva?
Se vuelve más poderoso, si uno tiene que iterar múltiples listas en paralelo en términos de rendimiento. Solo un pensamiento
fuente