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?
Réponses
Trop de publicités?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;
}
É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.
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.