Comment puis-je obtenir le dernier élément d'un itérateur? Je suis conscient que je dois épuiser l'itérateur et renvoyer la dernière valeur qu'elle produite, de sorte que l'approche ordinaire serait la suivante: (vous voudrez peut-être attraper le Y a-t-il une solution plus simple que je ne pensais pas, e. g. en utilisant NameError Code> et soulever quelque chose d'autre pour l'entrée vide, mais vous obtenez l'idée.) p>
ithertools.lice () code> (il ne semble pas accepter des indices négatifs, cependant) ou quelque chose de similaire? p> p>
4 Réponses :
Peut-être que vous pouvez utiliser où Vous le convertissez dans une liste et obtenez le dernier élément. p> p> il code> est l'itérateur. p>
Cela stocke brièvement tous les éléments de la mémoire, juste pour obtenir la dernière fois.
Une solution plus simple pourrait être d'utiliser Déballage intégré étendu : xxx pré>
Exemple: p>
it = range(10) *_, last = it print(last) # 9
Êtes-vous sûr que plage () code> renvoie un itérateur et non une liste?
@Gsk isinstance (plage (10), liste) code>
Malheureusement, il s'approche de la liste [- 1] code> qui maintient tous les éléments en mémoire à une fois également (votre solution les stocke brièvement dans
_ code>).
@yatu Désolé, mauvaise formulation de la question: Plage () code> retourne un itérateur, pas un itérateur
. Je suis juste curieux, je trouve votre réponse intéressante
Ce n'est pas une voie pythonique, mais juste une autre solution. Si vous êtes correct d'utiliser Toolz . Ensuite, vous pouvez faire ce qui suit.
from toolz import last last(it)
Ce qui suit est d'environ 26% plus rapide que
import collections def last(iterator): return collections.deque(iterator, maxlen=1).pop()
Vous pouvez renvoyer ici