curso
Tutorial de la función range() de Python
La función range()
es una función muy popular y muy utilizada en Python, especialmente cuando trabajas con bucles for
, y a veces también con bucles while
. Merece la pena conocer y dominar la función range()
, porque hacerlo te abrirá muchas puertas: range()
se utiliza en todo, desde controlar el flujo de un programa hasta recorrer en bucle conjuntos de datos que utilizas para el análisis de datos.
Si te estás iniciando en Python y quieres aprender más, sigue el curso Introducción a la Ciencia de Datos en Python de DataCamp.
¿Qué es la función range() en Python?
La función range()
devuelve una secuencia de números y es inmutable, es decir, su valor es fijo. La función range()
toma uno o como máximo tres argumentos, a saber, el valor start
y un valor stop
junto con un tamaño step
.
range()
se introdujo en Python3. En Python2, se utilizaba una función similar, xrange()
, que tenía un comportamiento algo diferente. Entre otras cosas, xrange()
devolvía un objeto generador y consumía menos memoria, mientras que range()
, en cambio, devuelve una lista o secuencia de números.
Parte de la utilidad de la función range()
se debe a que sólo almacena los valores start
, stop
, y step
, por lo que consume menos memoria en comparación con una lista o tupla.
Sintaxis de la función Python range()
La función range()
puede representarse de tres formas distintas, o puedes pensar en ellas como tres parámetros range()
:
range(stop_value)
: Por defecto, el punto de partida aquí es cero.
range(start_value, stop_value)
: Esto genera la secuencia basándose en el valor de inicio y parada.
range(start_value, stop_value, step_size)
: Genera la secuencia incrementando el valor de inicio utilizando el tamaño de paso hasta alcanzar el valor de parada.

También podemos comprobar el tipo de la función range()
envolviendo range()
en type()
.
type(range(100))
range
Ejemplos de la función Python range()
Veamos ahora algunos ejemplos para que practiques y domines el uso de range()
.
Utilizar range() de Python para imprimir una secuencia de números
Empecemos con un ejemplo sencillo de impresión de una secuencia de diez números, que cubrirá tu primer parámetro range()
. Para ello, sólo tendrás que introducir el valor stop
. Como Python funciona con indexación basada en cero, por tanto, la secuencia empezará por cero y se detendrá en el número especificado, es decir, $n-1$
, donde $n$
es el número especificado en la función range()
.
range(10) #it should return a lower and an upper bound value.
range(0, 10)
for seq in range(10):
print(seq)
0
1
2
3
4
5
6
7
8
9
Como era de esperar, la celda anterior devuelve una secuencia de números que empieza en $0$
y termina en $9$
.
Utilizar range() de Python con list()
También podrías utilizar la función rango como argumento de una lista, en cuyo caso se obtendría una lista de números con una longitud igual al valor de parada, como se muestra a continuación:
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
len(list(range(10)))
10
Utilización de inicio, parada y paso en Python range()
A continuación, vamos a ver otra forma de trabajar con la función range()
. Aquí especificarás tanto start
como el valor de stop
.
range(5,10)
range(5, 10)
for seq in range(5,10):
print(seq)
5
6
7
8
9
Del mismo modo, puedes utilizar la función range()
para imprimir también los valores enteros negativos.
for seq in range(-5,0):
print(seq)
-5
-4
-3
-2
-1
list(range(10,20))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Añadamos ahora el tercer parámetro, es decir, el tamaño step
a la función range()
, y averigüemos cómo afecta a la salida. Especificarás el punto start
como 50, el valor stop
como 1000 con un tamaño step
de 100. La siguiente función de rango debe mostrar una secuencia que empiece por 50 y se incremente con un paso de 100.
range(50,1000,100)
Verás que imprimirá todos los números pares.
for seq in range(50,1000,100):
print(seq)
50
150
250
350
450
550
650
750
850
950
Nota sobre range() en Python y los valores flotantes
Es importante tener en cuenta que la función range()
sólo puede funcionar cuando el valor especificado es un número entero o un número entero. No admite el tipo de datos flotante ni el tipo de datos cadena. Sin embargo, puedes pasarle valores enteros tanto positivos como negativos. Veamos qué ocurre cuando intentas pasar valores flotantes.
for seq in range(0.2,2.4):
print(seq)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-32-4d2f304928d0> in <module>
----> 1 for seq in range(0.2,2.4):
2 print(seq)
TypeError: 'float' object cannot be interpreted as an integer
Te habrás rascado la cabeza al menos una vez al intentar invertir una lista enlazada de valores enteros en lenguaje C. Sin embargo, en Python, se puede conseguir con la función range()
con sólo intercambiar los start
y stop
junto con añadir un tamaño de paso negativo. ¿No es tan sencillo? ¡Averigüémoslo!
for seq in range(100,10,-10):
print(seq)
100
90
80
70
60
50
40
30
20
Utilizar range() para hallar la suma de una lista
Supongamos que tienes una lista de valores enteros y quieres hallar la suma de la lista, pero utilizando la función range()
. Averigüemos si se puede hacer.
En primer lugar, definirás la lista formada por valores enteros. A continuación, inicializa un contador en el que almacenarás el valor cada vez que iteras sobre la lista y también sumarás el valor actual de la lista con el valor antiguo del contador.
Para acceder a los elementos de la lista, aplicarás la función range()
en el length
de la lista y luego accederás a los elementos de la lista pasando por alto el índice i
, que empezará en cero y se detendrá en la longitud de la lista.
list1 = [2,4,6,8,10,12,14,16,18,20]
count = 0
for i in range(len(list1)):
count = count + list1[i]
print(count)
print('sum of the list:', count)
2
6
12
20
30
42
56
72
90
110
sum of the list: 110
Utilizar range() con itertools para concatenar una lista
También podrías concatenar dos o más funciones de range()
utilizando la clase del paquete itertools
llamada chain
. Y no sólo la función range
, podrías incluso concatenar listas, tuplas, etc. Recuerda que el método chain
devuelve un objeto generador, y para acceder a los elementos de ese objeto generador, puedes utilizar un bucle for
o utilizar list
y pasarle el objeto generador como argumento.
from itertools import chain
a1 = range(10,0,-2)
a2 = range(30,20,-2)
a3 = range(50,40,-2)
final = chain(a1,a2,a3)
print(final) #generator object
<itertools.chain object at 0x107155490>
print(list(final))
[10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]
Python range() y comparaciones de igualdad
Puedes aplicar comparaciones de igualdad entre las funciones de range()
. Dadas dos funciones range()
, si representan la misma secuencia de valores, se consideran iguales. Dicho esto, dos funciones range()
iguales no tienen por qué tener los mismos atributos start
, stop
y step
. Entendámoslo con un ejemplo.
list(range(0, 10, 3))
[0, 3, 6, 9]
list(range(0, 11, 3))
[0, 3, 6, 9]
range(0, 10, 3) == range(0, 11, 3)
True
range(0, 10, 3) == range(0, 11, 2)
False
Como puedes observar en las salidas anteriores, aunque los parámetros de la función range()
sean diferentes, se siguen considerando iguales, ya que la secuencia de ambas funciones es la misma. En el segundo ejemplo, cambiar el tamaño de step
hace que la comparación sea False
.
Conclusión
Enhorabuena por terminar el tutorial. Quizá quieras trastear un poco con la función range()
y encontrar la forma de personalizarla para que acepte otros tipos de datos además de los enteros.
Si, después de leer, crees que te vendría bien practicar las funciones de Python, consulta nuestros tutoriales Funciones de Python y Guía para principiantes de Python para bucles. Para una ruta de aprendizaje estructurada, echa un vistazo a nuestro curso DataCamp Escribir código Python eficiente, que no sólo cubre la función range()
en detalle, sino que también ayuda con conceptos de codificación más generales para ayudarte a escribir código realmente eficiente sin mucha sobrecarga.
Más información sobre Python
curso
Introducción a las funciones en Python
curso