Supposons que j'ai une liste comme celle-ci:
mylist = ["a","b","c","d"]
Pour obtenir les valeurs imprimées avec leur index, je peux utiliser la enumerate
fonction de Python comme ceci
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
Maintenant, quand j'essaye de l'utiliser à l'intérieur d'un list comprehension
ça me donne cette erreur
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
Donc, ma question est: quelle est la bonne façon d'utiliser enumerate dans la compréhension de liste?
,
non le()
. Donc "mettrei,j
dans un tuple" n'a aucun sens, puisquei,j
c'est déjà un tuple! Le problème est que l'analyseur de compilation de liste a besoin des parenthèses pour le groupe d'instructions.Juste pour être très clair, cela n'a rien à voir avec
enumerate
et tout à voir avec la syntaxe de compréhension de liste.Cette compréhension de liste renvoie une liste de tuples:
voici une liste de dictats:
une liste de listes:
une erreur de syntaxe:
Ce qui est incohérent (IMHO) et déroutant avec la syntaxe de compréhension du dictionnaire:
Et un ensemble de tuples:
Comme Óscar López l'a déclaré, vous pouvez simplement passer le tuple d'énumération directement:
la source
Ou, si vous n'insistez pas pour utiliser une compréhension de liste:
la source
Si vous utilisez de longues listes, il semble que la compréhension de la liste soit plus rapide, pour ne pas dire plus lisible.
la source
[t for t in enumerate(my list)]
c'est encore plus rapide.Voici une façon de le faire:
Alternativement, vous pouvez faire:
La raison pour laquelle vous avez obtenu une erreur était que vous manquiez le () autour
i
etj
d'en faire un tuple.la source
Soyez explicite sur les tuples.
la source
Tous les gars de bonne réponse. Je sais que la question ici est spécifique à l'énumération, mais qu'en est-il de quelque chose comme ça, juste une autre perspective
Cela devient plus puissant, si l'on doit itérer plusieurs listes en parallèle en termes de performances. Juste une pensée
la source