Python – Capítulo 20: La función range()

Artículo tras artículo, nuestro maletín de herramientas de Python va cogiendo peso y disponemos de nuevos recursos para afrontar cualquier desafío de programación. En la entrega de hoy hablaremos de la función range(). Si alguien no entiende aún por qué Python es tan especial, que eche una ojeada a esto.

La función range() es muy simple, pero de una potencia tremenda: genera automáticamente una secuencia con una progresión aritmética.

Puede utilizarse con uno, dos o tres parámetros.

Comencemos por su uso básico con uno sólo:

>>> range(5)
range(0, 5)

Este comando, aunque aparente no haber hecho nada, ha generado una secuencia virtual de números enteros ¿No se ve nada?. Para poder hacer de carne y hueso esta secuencia vamos a convertirla en lista con la función list().

>>> list(range(5))
[0, 1, 2, 3, 4]

Ahora sí, ya vemos de qué madera está hecha: se trata de una progresión aritmética de término inicial 0 y final 4, uno menos que el valor del parámetro especificado.

Incluyamos ahora dos parámetros:

>>> list(range(1,8))
[1, 2, 3, 4, 5, 6, 7]

Cuando especificamos dos valores, el primero es el término inicial. El segundo, al igual que en el ejemplo anterior, constituye el término superior no incluido.

Si indicamos tres parámetros, el tercero supone la diferencia de la progresión aritmética (el incremento):

>>> list(range(1,10,2))
[1, 3, 5, 7, 9]

Es decir se trata de una progresión aritmética que comienza en 1, termina en 9 y en la que cada elemento se obtiene sumando 2 al anterior.

Naturalmente, esto también funciona con enteros negativos:

>>> list(range(-3,10))
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

El siguiente programa calcula la suma de todos los números naturales desde el 1 hasta el 1000 (incluido):

suma = 0
for n in range(1001):
    suma+=n
print(suma)

Si lo ejecutamos, obtenemos:

python capitulo20-1.py
500500

Este otro numera automáticamente los elementos de una lista:

# Esta lista ya nos es familiar
semana=['lunes', 'martes', 'miércoles', 'jueves', 
       'viernes', 'sábado', 'domingo']
for n in range(len(semana)):
    print(n+1, semana[n])

Ejecutémoslo:

python capitulo20-2.py

1 lunes
2 martes
3 miércoles
4 jueves
5 viernes
6 sábado
7 domingo

Observad como, en la función print(), he indicado, como parámetro n+1 para que la numeración comience por 1 y no en 0.

Asimilad la función range() y hacedla vuestra. Cada paso que damos nos acerca al objetivo, que no es otro sino ser capaces de hacer practicamente cualquier cosa utilizando Python.

Javier Montero


Python – Capítulo 20: La función range()


Si este artículo te ha parecido interesante y crees que puede ser útil a los demás, considera la posibilidad de compartirlo en tus redes sociales favoritas.

4 opiniones en “Python – Capítulo 20: La función range()”

  1. En el programa “capitulo20-2.py”, n no esta definida previamente, pero el sistema le otorga un valor “0”. Esto es por defecto?
    Gracias.

    1. Las variables que recorren el iterable no necesitan ser inicializadas. Lo hacen automáticamente con el primer valor que le otorga el iterable, en este caso 0, que es lo primero que da range.
      En este otro caso:
      for n in [‘a’, ‘b’, ‘c’]: su primer valor sería ‘a’.
      Saludos

  2. Al usar range() en Python 2.x con números muy grandes (como iterar entre millones de números) probablemente devuelva un MemoryError o tarde bastante hasta que se genere la lista con todos los números. Para resolver esto existe xrange() que funciona exactamente igual que range(), solo que en este caso devuelve un iterable que va generando los números según se necesite.
    En Python 3 parece que esto ya no hace falta.

Deja un comentario