Hmmm. Il y avait une réponse avec une liste de compréhension ici, mais elle a disparu.
Ici :
[i for i,x in enumerate(testlist) if x == 1]
Exemple :
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Mise à jour :
Ok, vous voulez une expression de générateur, nous aurons une expression de générateur. Voici à nouveau la compréhension de la liste, dans une boucle for :
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Maintenant, nous allons construire un générateur...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
et heureusement, nous pouvons l'assigner à une variable, et l'utiliser à partir de là...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
Et dire que j'écrivais en FORTRAN.