range en Python es un tipo que se utiliza para representar una secuencia inmutable de números. Uno de sus principales usos es junto a la sentencia for, para definir un bucle sobre el que se itera un número determinado de veces.
Descubre en este tutorial la clase range y sus principales usos y operaciones.
Índice
La clase range en Python
Como te adelantaba en la introducción, range es un tipo de dato que representa una secuencia de números inmutable.
Para crear un objeto de tipo range
, se pueden usar dos constructores :
range(fin)
: Crea una secuencia numérica que va desde0
hastafin - 1
.range(inicio, fin, [paso])
: Crea una secuencia numérica que va desdeinicio
hastafin - 1
. Si además se indica el parámetropaso
, la secuencia genera los números depaso
enpaso
.
Veámoslo con un ejemplo:
>>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(5, 10)) [5, 6, 7, 8, 9] >>> list(range(0, 10, 3)) [0, 3, 6, 9] >>> list(range(0, -10, -1)) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> list(range(5, -5, -2)) [5, 3, 1, -1, -3]
¿Por qué estoy utilizando en los ejemplos la clase range
como argumento de list
? range
, además de un tipo secuencial es un tipo iterable con una particularidad: a diferencia de los tipos list o tuple, range
calcula los ítems al vuelo, cuando los necesita. Como list acepta un objeto iterable como parámetro, por eso paso un objeto range al constructor de list, para que se muestre por pantalla la secuencia completa que se genera con range.
❗️NOTA: Si se llama al constructor range()
con parámetros incorrectos, se obtendrá un objeto vacío.
# Nunca se puede ir de 0 a 10 de -1 en -1 >>> list(range(0, 10, -1)) []
Recorrer una secuencia numérica
En la introducción te adelanté que uno de los principales usos de range()
es utilizarlo en bucles for
. Aquí puedes ver todos los detalles del uso de for y range en Python.
>>> for i in range(1, 11): ... print(i) ... 1 2 3 4 5 6 7 8 9 10
Ventajas de usar range en Python
La principal ventaja de usar range sobre list o tuple es que es un iterable que genera los elementos solo en el momento en que realmente los necesita. Esto implica que usa una cantidad de memoria mínima, por muy grande que sea el rango de números que represente.
Veamos una comparación de una lista que almacena los números del 0 al 100.000 y un rango del 0 al 100.000:
>>> import sys >>> lista = list(range(0, 100000)) >>> rango = range(0, 100000) >>> sys.getsizeof(lista) 900120 >>> sys.getsizeof(rango) 48
Como puedes apreciar, la lista ocupa casi 1 MB en memoria frente a los 48 bytes que ocupa el rango.
Operaciones de la clase range
Al tratarse de un tipo secuencial, range implementa las operaciones básicas de ese tipo a excepción de la concatenación y la repetición:
>>> r = range(0,30, 3) >>> r[2] 6 >>> r[-1] 27 >>> 13 in r False >>> 12 in r True >>> r.index(18) 6
Bueno, pues con esto, hemos llegado al final de este tutorial. Recuerda, usa la clase range para generar secuencias de números, especialmente si las necesitas en un bucle for.