Solución:
En Python 2.x:
-
range
crea una lista, así que si lo hacerange(1, 10000000)
crea una lista en la memoria con9999999
elementos. -
xrange
es un objeto de secuencia que se evalúa de forma perezosa.
En Python 3:
-
range
hace el equivalente de Python 2xrange
. Para obtener la lista, debe usar explícitamentelist(range(...))
. -
xrange
ya no existe.
range crea una lista, así que si lo haces
range(1, 10000000)
crea una lista en la memoria con9999999
elementos.
xrange
es un generador, entonceses un objeto de secuenciaes unque evalúa perezosamente.
Esto es cierto, pero en Python 3, range()
será implementado por Python 2 xrange()
. Si realmente necesita generar la lista, deberá hacer lo siguiente:
list(range(1,100))
Recuerde, use el timeit
módulo para probar cuál de los pequeños fragmentos de código es más rápido.
$ python -m timeit 'for i in range(1000000):' ' pass'
10 loops, best of 3: 90.5 msec per loop
$ python -m timeit 'for i in xrange(1000000):' ' pass'
10 loops, best of 3: 51.1 msec per loop
Personalmente, siempre uso range()
, a menos que estuviera tratando con De Verdad listas enormes: como puede ver, en términos de tiempo, para una lista de un millón de entradas, la sobrecarga adicional es de solo 0.04 segundos. Y como señala Corey, en Python 3.0 xrange()
se irá y range()
le dará un buen comportamiento de iterador de todos modos.