89 votes

Obtenez le nième élément d'un générateur en Python

Existe-t-il une façon plus syntaxiquement concise d'écrire ce qui suit ?

gen = (i for i in xrange(10))
index = 5
for i, v in enumerate(gen):
    if i is index:
        return v

Il semble presque naturel qu'un générateur ait une expression gen[index], qui agit comme une liste, mais est fonctionnellement identique au code ci-dessus.

94voto

cobbal Points 37900

une méthode serait d'utiliser itertools.islice

>>> gen = (x for x in range(10))
>>> index = 5
>>> next(itertools.islice(gen, index, None))
5

16voto

Mark Byers Points 318575

Vous pouvez le faire en utilisant count comme générateur d'exemple :

from itertools import islice, count
next(islice(count(), n, n+1))

0voto

Alexey Points 562

La première chose qui m'est venue à l'esprit était :

gen = (i for i in xrange(10))
index = 5

for i, v in zip(range(index), gen): pass

return v

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X