Vamos supor que eu tenha uma lista como esta:
mylist = ["a","b","c","d"]
Para obter os valores impressos junto com seu índice, posso usar a enumerate
função do Python assim
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Agora, quando eu tento usá-lo dentro de um, list comprehension
isso me dá esse erro
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Então, minha pergunta é: qual é a maneira correta de usar enumerar a compreensão da lista interna?
python
list
iteration
list-comprehension
RanRag
fonte
fonte
,
não o()
. Portanto, "colocari,j
dentro de uma tupla" não faz sentido, poisi,j
já é uma tupla! O problema é que o analisador de compactação de lista precisa das parênteses para o grupo de instruções.Só para ficar bem claro, isso não tem nada a ver com
enumerate
e tudo a ver com a sintaxe de compreensão da lista.Essa compreensão da lista retorna uma lista de tuplas:
esta é uma lista de ditados:
uma lista de listas:
um erro de sintaxe:
O que é inconsistente (IMHO) e confuso com a sintaxe de compreensão de dicionário:
E um conjunto de tuplas:
Como Óscar López afirmou, você pode simplesmente passar a tupla enumerada diretamente:
fonte
Ou, se você não insistir em usar uma compreensão de lista:
fonte
Se você estiver usando listas longas, parece que a compreensão da lista é mais rápida, sem mencionar mais legível.
fonte
[t for t in enumerate(my list)]
é ainda mais rápido.Aqui está uma maneira de fazer isso:
Como alternativa, você pode fazer:
A razão pela qual você recebeu um erro foi porque estava perdendo o ()
i
ej
para torná-lo uma tupla.fonte
Seja explícito sobre as tuplas.
fonte
Todos ótimos caras de resposta. Eu sei que a pergunta aqui é específica para enumeração, mas que tal algo assim, apenas outra perspectiva
Torna-se mais poderoso se for necessário repetir várias listas em paralelo em termos de desempenho. Apenas um pensamento
fonte