Obtenir le n-ième élément d'un générateur en Python

Est-il un plus pour la syntaxe concise façon d'écrire la suite?

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 que d'un générateur doit avoir un gen[index] expression, qui agit comme une liste, mais est fonctionnellement identique au code ci-dessus.

  • Vous ne voulez pas is dans cette situation (ou dans de nombreuses situations à tous). is est pour la comparaison de l'identité, non pas l'égalité. Vous souhaitez ==. Ce sera sans doute dans cette instance, mais uniquement par le hasard et le détail de l'implémentation.
  • Depuis que je suis en utilisant des entiers, comment pourrait-il ne fonctionne pas? Est-il même bien pratique de s'attendre à ce que le index objet de mettre en œuvre __eq__ dans de tels cas? (Ça devient hors sujet...)
  • Essayez 1000 is 500 + 500, il sera (probablement) être False. Voir, par exemple, stackoverflow.com/questions/306313/...
  • +1 pour cette question. Il semble étrange qu'il n'y a pas moins verbeux-à-dire "le n-ième résultat de gen".
  • Une autre possibilité est de fermetures à glissière - - - - ils gérer arbitraire des arbres, mais une liste est un arbre aussi. Voir cette mise en œuvre github.com/trivio/zipper/blob/master/tests/test_zipper.py
InformationsquelleAutor Oliver Zheng | 2010-02-20