Dominando la función range() de Python: desde lo básico a casos avanzados
Dominando la función range() de Python: desde lo básico a casos avanzados
¿Qué es range() en Python?
La función range() de Python es un generador integrado que produce una secuencia de enteros basada en un inicio, fin y paso opcional. Si se omite el valor de inicio, por defecto es 0, y la secuencia se incrementa en 1 hasta alcanzar el valor de fin (exclusivo). Por ejemplo, range(5) produce 0, 1, 2, 3, 4. La función es indispensable al iterar con bucles for.
En este tutorial aprenderás:
- Definición y sintaxis de
range() - Historia:
range()vs.xrange() - Cómo usar
range()con inicio, fin y paso - Incrementar y decrementar rangos
- Manejo de límites de punto flotante y alternativas
- Uso de
range()con listas, arrays yarange()de NumPy - Patrones avanzados: fusionar rangos, extraer números pares, generar secuencias alfabéticas
Sintaxis
range(inicio, fin, paso)
Parámetros
- inicio (opcional): El primer entero de la secuencia. Por defecto 0 si se omite.
- fin (obligatorio): El límite superior (exclusivo). La secuencia se detiene antes de este valor.
- paso (opcional): El intervalo entre valores consecutivos. Por defecto 1.
Valor de retorno
Devuelve un objeto range, que se comporta como una secuencia inmutable de enteros. Al convertirlo a lista, muestra la secuencia completa.
Historia de range() en Python
Introducida en Python 3, range() reemplazó al antiguo xrange() usado en Python 2. Las diferencias clave se resumen a continuación:
| range() | xrange() |
|---|---|
| Devuelve una secuencia inmutable de números. | Devuelve un objeto generador. |
| Consume memoria proporcional a la longitud de la secuencia. | Usa memoria mínima; genera valores perezosamente. |
| Adecuado para rangos pequeños a medianos. | Preferido para rangos grandes o secuencias infinitas. |
| Más lento en rangos muy grandes por asignación de memoria. | Más rápido al iterar sobre rangos grandes. |
Uso de range()
Ejemplo básico que imprime números del 0 al 9:
for i in range(10):
print(i, end=" ")
Salida:
0 1 2 3 4 5 6 7 8 9
Usando inicio y fin en range()
Especificar un valor de inicio desplaza la secuencia:
for i in range(3, 10):
print(i, end=" ")
Salida:
3 4 5 6 7 8 9
Usando inicio, fin y paso
Añadiendo un paso, controlas el intervalo entre números:
for i in range(3, 10, 2):
print(i, end=" ")
Salida:
3 5 7 9
Incrementando valores con paso positivo
El paso por defecto es 1, pero puedes especificar cualquier entero positivo:
for i in range(1, 30, 5):
print(i, end=" ")
Salida:
1 6 11 16 21 26
Rango inverso: decrementando con paso negativo
Proporcionar un paso negativo crea una secuencia descendente:
for i in range(15, 5, -1):
print(i, end=" ")
Salida:
15 14 13 12 11 10 9 8 7 6
Usando números flotantes en range()
El range() integrado solo acepta enteros. Intentar pasar un float lanza un TypeError:
for i in range(10.5):
print(i, end=" ")
Salida:
Traceback (most recent call last): File "python_range.py", line 1, infor i in range(10.5): TypeError: 'float' object cannot be interpreted as an integer
Usando bucle for con range()
Range se usa a menudo con len() para iterar sobre índices de lista:
lista = ['MySQL', 'MongoDB', 'PostgreSQL', 'Firebase']
for i in range(len(lista)):
print(lista[i], end=" ")
Salida:
MySQL MongoDB PostgreSQL Firebase
Usando range() como lista
Convertir un range a lista es sencillo:
print(list(range(10)))
Salida:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Usando caracteres en range()
Aunque range() solo funciona con enteros, puedes generar secuencias alfabéticas convirtiendo caracteres a sus puntos de código Unicode:
def obtener_alfabeto(letra_inicio, letra_fin, paso):
for c in range(ord(letra_inicio.lower()), ord(letra_fin.lower()), paso):
yield chr(c)
print(list(obtener_alfabeto("a", "h", 1)))
Salida:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
Cómo acceder a elementos de range
Puedes recuperar valores mediante iteración, indexación o conversión a lista:
Iteración
for i in range(6):
print(i)
Salida:
0 1 2 3 4 5
Indexación
primer_valor = range(5)[0]
print("El primer elemento es =", primer_valor)
segundo_valor = range(5)[1]
print("El segundo elemento es =", segundo_valor)
ultimo_valor = range(5)[-1]
print("El último elemento es =", ultimo_valor)
Salida:
El primer elemento es = 0 El segundo elemento es = 1 El último elemento es = 4
Usando list()
print(list(range(10)))
Salida:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ejemplo: Obtener números pares con range()
Para generar números pares hasta 18:
for i in range(2, 20, 2):
print(i, end=" ")
Salida:
2 4 6 8 10 12 14 16 18
Fusionando dos salidas de range()
Combinar dos objetos range puede hacerse con itertools.chain:
from itertools import chain
print("Fusionando dos rangos en uno")
rango_fusionado = chain(range(10), range(10, 20, 1))
for i in rango_fusionado:
print(i, end=" ")
Salida:
Fusionando dos rangos en uno 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Usando range() con NumPy
NumPy's arange() replica range() pero soporta pasos de punto flotante:
Sintaxis
arange(inicio, fin, paso)
Ejemplo
import numpy as np
for i in np.arange(10):
print(i, end=" ")
Salida:
0 1 2 3 4 5 6 7 8 9
Rango de punto flotante con NumPy
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
Salida:
0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
Debido a que la aritmética de punto flotante es binaria, la salida a veces muestra expansiones decimales largas. Puedes redondear los valores según necesites.
Resumen
- range() genera una secuencia entera definida por inicio, fin y paso.
- Introducida en Python 3; xrange() fue su predecesora en Python 2.
- Usa paso positivo para secuencias ascendentes, negativo para descendentes.
- Los números flotantes no son compatibles; usa NumPy arange() para floats.
- Accede a elementos mediante iteración, indexación o conversión con
list(). - Combina rangos con
itertools.chaino genera secuencias personalizadas como alfabetos. - Para rangos numéricos grandes, considera el comportamiento de generador para eficiencia de memoria.
python
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Funciones lambda en Python: Guía práctica de funciones anónimas
- Generadores en Python: Iteración Eficiente y Casos de Uso Avanzados
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
- Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
- Función abs() en Python: calcular valores absolutos para números y complejos
- Función round() en Python explicada con ejemplos prácticos
- Dominando la función range() de Python: desde lo básico a casos avanzados
- Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
- Dominando enumerate() en Python: bucles con índices para listas, tuplas, cadenas y diccionarios
- Python list.count(): Guía Experta con Ejemplos Prácticos