Curso
La función range() es muy popular y se utiliza ampliamente en Python, especialmente cuando se trabaja con bucles for y, en ocasiones, también con bucles while. Vale la pena conocer y dominar la función range(), ya que hacerlo te abrirá muchas puertas: range() se utiliza en todo, desde controlar el flujo de un programa hasta recorrer conjuntos de datos que estás utilizando para el análisis de datos.
Si acabas de empezar con Python y te gustaría aprender más, haz 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, lo que significa que su valor es fijo. La función range() toma uno o como máximo tres argumentos, a saber, el valor start y el valor stop, junto con el 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() devuelve un objeto generador y consume menos memoria, mientras que range(), por otro lado, devuelve una lista o secuencia de números.
Parte de la razón por la que la función range() es útil es porque solo almacena los valores start, stop y step, por lo que consume menos memoria en comparación con una lista o una tupla.
Sintaxis de la función range() de Python
La función range() se puede representar de tres maneras diferentes, 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 basada en el valor inicial y final.
range(start_value, stop_value, step_size): Genera la secuencia incrementando el valor inicial utilizando el tamaño del paso hasta alcanzar el valor final.

También podemos comprobar el tipo de la función range() envolviendo range() en type().
my_range = range(100)
print(type(my_range))
# Expected output: <class 'range'>
Ejemplos de la función range() de Python
Veamos ahora algunos ejemplos para que puedas practicar y dominar el uso de range().
Usar range() en Python para imprimir una secuencia de números
Comencemos con un ejemplo sencillo de impresión de una secuencia de diez números, que cubrirá tu primer parámetro range(). Para lograrlo, solo tendrás que introducir el valor stop. Dado que Python funciona con indexación basada en cero, la secuencia comenzará en cero y terminará en el número especificado, es decir, n-1, donde n es el número especificado en la función range().
my_range = range(10)
for num in my_range:
print(num)
# Expected output:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
Como era de esperar, la celda anterior devuelve una secuencia de números que comienza en 0 y termina en 9.
Uso de range() con list() en Python
También puedes utilizar la función range como argumento de una lista, en cuyo caso obtendrás una lista de números con una longitud igual al valor de parada, como se muestra a continuación:
my_range = list(range(10))
print(my_range)
range_length = len(my_range)
print(range_length)
# Expected output:
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 10
Uso de start, stop y step en Python range()
A continuación, veamos otra forma de trabajar con la función range(). Aquí especificarás tanto el valor start como el valor stop.
my_range = range(5, 10)
print(my_range)
# Expected output: range(5, 10)
for num in range(5,10):
print(num)
# Expected output:
# 5
# 6
# 7
# 8
# 9
Del mismo modo, puedes utilizar la función range() para imprimir también los valores enteros negativos.
for num in range(-5,0):
print(num)
# Expected output:
# -5
# -4
# -3
# -2
# -1
Ahora añadamos el tercer parámetro, es decir, el tamaño del área de trabajo ( step ) a la función de relleno ( range() ), y veamos cómo afecta al resultado. Especificarás el punto start (Punto de entrada) como 50, el valor stop (Punto de salida) como 1000 y el tamaño step (Tamaño de la ventana) como 100. La siguiente función de rango debería generar una secuencia que comience en 50 y se incremente en pasos de 100.
my_range = range(50,1000,100)
print(my_range)
# Expected output: range(50, 1000, 100)
Notarás que imprimirá todos los números pares.
for num in range(50,1000,100):
print(num)
# Expected output:
# 50
# 150
# 250
# 350
# 450
# 550
# 650
# 750
# 850
# 950
Una nota sobre range() y los valores flotantes en Python
Es importante tener en cuenta que la función range() solo funciona cuando el valor especificado es un número entero o un número completo. No admite el tipo de datos flotantes ni el tipo de datos de cadena. Sin embargo, puedes pasarle valores enteros tanto positivos como negativos. Veamos qué sucede cuando intentas pasar valores flotantes.
for num in range(0.2,2.4):
print(num)
# Expected output:
# TypeError: 'float' object cannot be interpreted as an integer
Seguramente te habrás devanado los sesos al menos una vez al intentar invertir una lista enlazada de valores enteros en lenguaje C. Sin embargo, en Python, esto se puede lograr con la función range() simplemente intercambiando start y stop y añadiendo un tamaño de paso negativo. ¿No es así de sencillo? ¡Vamos a averiguarlo!
for num in range(100,10,-10):
print(num)
# Expected output:
# 100
# 90
# 80
# 70
# 60
# 50
# 40
# 30
# 20
Usar range() para hallar la suma de una lista
Supongamos que tienes una lista de valores enteros y deseas 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 que contiene valores enteros. A continuación, inicializa un contador en el que almacenarás el valor cada vez que iteres sobre la lista y también suma el valor actual de la lista al valor anterior del contador.
Para acceder a los elementos de la lista, aplicarás la función range() al length de la lista y, a continuación, accederás a los elementos de la lista omitiendo el índice i, que comenzará desde cero y terminará 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)
# Expected output:
# 2
# 6
# 12
# 20
# 30
# 42
# 56
# 72
# 90
# 110
# sum of the list: 110
Usar range() con itertools para concatenar una lista
También puedes concatenar dos o más funciones range() utilizando la clase del paquete itertools llamada chain. Y no solo la función range, sino que incluso se pueden 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 pasar 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
# Expected output: <itertools.chain object at 0xae6330>
print(list(final))
# Expected output:
# [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 funciones de range(). Dadas dos funciones e range() es, si representan la misma secuencia de valores, se consideran iguales. Dicho esto, dos funciones iguales range() no necesitan tener los mismos atributos start, stop y step. Entendámoslo con un ejemplo.
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 3) = [0, 3, 6, 9]
print(range(0, 10, 3) == range(0, 11, 3))
# Expected output: True
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 2) = [0, 2, 4, 6, 8, 10]
print(range(0, 10, 3) == range(0, 11, 2))
# Expected output: False
Como puedes observar en los resultados anteriores, aunque los parámetros de la función range() son diferentes, se consideran iguales, ya que la secuencia de ambas funciones es la misma. En el segundo ejemplo, al cambiar el tamaño de step, la comparación pasa a ser False.
Conclusión
Enhorabuena por haber completado el tutorial. Quizás quieras jugar un poco con la función range() y encontrar una forma de personalizarla para que acepte otros tipos de datos además de los enteros.
Si, después de leerlo, crees que te podría resultar útil practicar con las funciones de Python, echa un vistazo a nuestros tutoriales Funciones de Python y Guía para principiantes sobre Bucle for en Python. Si deseas seguir un itinerario de aprendizaje estructurado, echa un vistazo a nuestro curso Writing Efficient Python Code (Escribir código Python eficiente) de DataCamp, que no solo trata en detalle la función range(), sino que también aborda conceptos de programación más generales que te ayudarán a escribir código realmente eficiente sin mucha sobrecarga.