99 votes

Python: Les listes Python conservent-elles un compte pour len () ou comptent-elles pour chaque appel?

Si je continue d'appeler len () sur une très longue liste, est-ce que je perds du temps ou conserve-t-il un compte int en arrière-plan?

106voto

Ferdinand Beyer Points 27723

Ne vous inquiétez pas: bien sûr, cela évite le décompte et donc, len() sur les listes est une opération assez peu coûteuse. Il en va de même pour les chaînes, les dictionnaires et les ensembles, au fait!

46voto

AKX Points 14236

Une autre façon de savoir comment procéder consiste à le rechercher dans Google Code Search , si vous ne souhaitez pas télécharger le code source vous-même.

 static Py_ssize_t list_length(PyListObject *a)
{
    return a->ob_size;
}
 

32voto

George V. Reilly Points 5471

14voto

bignose Points 6573

Écrivez votre programme de sorte qu'il est optimisé pour plus de clarté et facilement maintenable. Est-ce votre programme plus clair avec un appel à " len(foo)'? Puis le faire.

Êtes-vous inquiet au sujet du temps? Utiliser le ‘timeit' module dans la bibliothèque standard pour mesurer le temps, et voir si elle est importante dans votre code.

Vous, comme la plupart des gens, très probablement mal dans vos suppositions sur les parties de votre programme sont plus lents.

Rappelez-vous que l' optimisation prématurée est la racine de tous les maux, dans les mots de Donald Knuth. Se concentrer uniquement sur la vitesse de code que vous avez mesuré la vitesse de la, savoir si ça vaut le coût de changer la façon dont il fonctionne.

5voto

dF. Points 29787

La question a été répondue ( len est O (1)), mais voici comment vous pouvez vérifier par vous-même:

 $ python -m timeit -s "l = range(10)" "len(l)"
10000000 loops, best of 3: 0.119 usec per loop
$ python -m timeit -s "l = range(1000000)" "len(l)"
10000000 loops, best of 3: 0.131 usec per loop
 

Oui, pas vraiment plus lent.

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