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.
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.
Función range() de Python. Imagen del autor.
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'>Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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# 9Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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]# 10Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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)Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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 inrange(0.2,2.4):print(num)# Expected output:# TypeError: 'float' object cannot be interpreted as an integerCon la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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 inrange(100,10,-10):print(num)# Expected output:# 100# 90# 80# 70# 60# 50# 40# 30# 20Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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 =0for i inrange(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: 110Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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>Con la tecnología de
Editor «Aprender con ejemplos», pulsa Tab para entrar. Pulsa Escape y luego Tab o Mayús+Tab para salir.
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.
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.
Un tutorial introductorio completo sobre los bucles en Python. ¡Aprende y practica los bucles while y Bucle for, los bucles anidados, las palabras clave break y continue, la función range y mucho más!
Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
La función
range()es muy popular y se utiliza ampliamente en Python, especialmente cuando se trabaja con buclesfory, en ocasiones, también con bucleswhile. Vale la pena conocer y dominar la funciónrange(), 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ónrange()toma uno o como máximo tres argumentos, a saber, el valorstarty el valorstop, junto con el tamañostep.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 querange(), 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 valoresstart,stopystep, 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ámetrosrange():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()envolviendorange()entype().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 valorstop. 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, dondenes el número especificado en la funciónrange().Como era de esperar, la celda anterior devuelve una secuencia de números que comienza en
0y termina en9.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:
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 valorstartcomo el valorstop.Del mismo modo, puedes utilizar la función
range()para imprimir también los valores enteros negativos.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 puntostart(Punto de entrada) como 50, el valorstop(Punto de salida) como 1000 y el tamañostep(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.Notarás que imprimirá todos los números pares.
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.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 intercambiandostartystopy añadiendo un tamaño de paso negativo. ¿No es así de sencillo? ¡Vamos a averiguarlo!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()allengthde la lista y, a continuación, accederás a los elementos de la lista omitiendo el índicei, que comenzará desde cero y terminará en la longitud de la lista.Usar range() con itertools para concatenar una lista
También puedes concatenar dos o más funciones
range()utilizando la clase del paqueteitertoolsllamadachain. Y no solo la funciónrange, sino que incluso se pueden concatenar listas, tuplas, etc. Recuerda que el métodochaindevuelve un objeto generador, y para acceder a los elementos de ese objeto generador, puedes utilizar un bucleforo utilizarlisty pasar el objeto generador como argumento.Python range() y comparaciones de igualdad
Puedes aplicar comparaciones de igualdad entre funciones de
range(). Dadas dos funciones erange()es, si representan la misma secuencia de valores, se consideran iguales. Dicho esto, dos funciones igualesrange()no necesitan tener los mismos atributosstart,stopystep. Entendámoslo con un ejemplo.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 destep, la comparación pasa a serFalse.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.