132 votes

Le moyen le plus propre d'obtenir le dernier élément de l'itérateur Python

Quel est le meilleur moyen d'obtenir le dernier élément d'un itérateur dans Python 2.6? Par exemple, disons

 my_iter = iter(range(5))
 

Quel est le moyen le plus court / le plus propre d’obtenir 4 de my_iter ?

Je pourrais le faire, mais cela ne semble pas très efficace:

 [x for x in my_iter][-1]
 

116voto

Thomas Wouters Points 38811
item = defaultvalue
for item in my_iter:
    pass

76voto

martin23487234 Points 181

Utilisez un deque de taille 1.

 from collections import deque

#aa is an interator
aa = iter('apple')

dd = deque(aa, maxlen=1)
last_element = dd.pop()
 

35voto

gnibbler Points 103484

Cela vaut probablement la peine d'utiliser __reversed__ s'il est disponible

 if hasattr(my_iter,'__reversed__'):
    last = next(reversed(my_iter))
else:
    for last in my_iter:
        pass
 

31voto

Chema Cortes Points 11

Aussi simple que:

 max(enumerate(the_iter))[1]
 

23voto

gnibbler Points 103484

Il est peu probable que cela soit plus rapide que la boucle vide pour cause à cause du lambda, mais peut-être que cela donnera à quelqu'un d'autre une idée

 reduce(lambda x,y:y,my_iter)
 

Si l'itérateur est vide, une erreur TypeError est déclenchée

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