Python fournit une belle méthode pour obtenir la longueur d'un itérable eager, len(x)
c'est-à-dire. Mais je n'ai rien trouvé de similaire pour les itérables paresseux représentés par des compréhensions de générateurs et des fonctions. Bien sûr, il n'est pas difficile d'écrire quelque chose comme :
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
Mais je n'arrive pas à me débarrasser du sentiment que je réimplante un vélo.
(Pendant que je tapais la fonction, une pensée m'a traversé l'esprit : peut-être que cette fonction n'existe pas vraiment, car elle "détruit" son argument. Ce n'est pas un problème pour mon cas, cependant).
P.S. : concernant les premières réponses - oui, quelque chose comme len(list(x))
fonctionnerait aussi, mais cela augmente considérablement l'utilisation de la mémoire.
P.P.S. : revérifié... Ne tenez pas compte du P.S., il semble que j'ai fait une erreur en essayant cela, cela fonctionne bien. Désolé pour le dérangement.
0 votes
Suggérer un changement de titre en Longueur de la sortie du générateur SEULEMENT -- les éléments itérés peuvent être jetés. . Sinon, cette question est confondue avec un autre .
6 votes
reimplementing a bicycle
- C'est presque comme réinventer la roue, sauf que c'est un programmeur qui l'a dit.