comp:~$ python Python 2.7.6 (par défaut, 22 juin 2015, 17:58:13) [GCC 4.8.2] sur linux2
>>> import timeit
>>> timeit.timeit("[x for x in xrange(1000000) if x%4]",nombre=100)
5.656799077987671
>>> timeit.timeit("[x for x in xrange(1000000) if x%4]",nombre=100)
5.579368829727173
>>> timeit.timeit("[x for x in range(1000000) if x%4]",nombre=100)
21.54827117919922
>>> timeit.timeit("[x for x in range(1000000) if x%4]",nombre=100)
22.014557123184204
Avec le paramètre de temps timeit nombre=1:
>>> timeit.timeit("[x for x in range(1000000) if x%4]",nombre=1)
0.2245171070098877
>>> timeit.timeit("[x for x en xrange(1000000) if x%4]",nombre=1)
0.10750913619995117
comp:~$ python3 Python 3.4.3 (par défaut, 14 octobre 2015, 20:28:29) [GCC 4.8.4] sur linux
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=100)
9.113872020003328
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=100)
9.07014398300089
Avec le paramètre de temps timeit nombre=1,2,3,4 fonctionne rapidement et de manière linéaire :
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=1)
0.09329321900440846
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=2)
0.18501482300052885
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=3)
0.2703447980020428
>>> timeit.timeit("[x for x en range(1000000) if x%4]",nombre=4)
0.36209142999723554
Il semble donc que si nous mesurons un cycle de boucle d'exécution comme timeit.timeit("[x pour x en range(1000000) si x%4]",nombre=1) (comme nous l'utilisons réellement dans le code) python3 fonctionne assez rapidement, mais dans les boucles répétées xrange() de python 2 l'emporte en vitesse sur range() de python 3.