Rangos infinitos con itertools en Python

Publicado el 20 diciembre 2010 por Iyanmv @iyanmv

Seguramente si has programado alguna vez en Python hayas tenido que utilizar la función range(). Es muy útil ya que te permite ya que te permite crear rangos de determinadas cifras. Por sí solo puede que no le encontremos gran utilidad pero unido al bucle for la cosa cambia. Nos permite crear bucles con determinados rangos. Un ejemplo sería el siguiente:

for i in range(10):
  print(i)

El resultado de este bucle es que el programa nos imprime en pantalla los número del 0 al 9 o lo que es lo mismo range(10). Os recuerdo que en la función range() podéis indicar tanto el número de inicio como el avance. Por ejemplo, range(5,20,3) devolvería los número 5, 8, 11, 14 y 17.

La función range() ha sufrido cambios en la rama 3.0 de este lenguaje de programación. En Python 2 cualquier range() crea una lista con los número que le corresponden. En cambio Python 3 considera a range como un tipo de variable y no crea una lista. En la siguiente captura podéis ver las diferencias.

Cambios de range() en Python 3

Tras esta introducción ahora el tema principal de esta entrada. ¿Se pueden crear rangos infinitos? La respuesta es sí pero tenemos que recurrir a un módulo llamado itertools. Con este módulo podemos crear rangos que vayan desde un número x al infinito, lo cual es muy útil en ciertos bucles en los que desconocemos el número final. A continuación un ejemplo:

import itertools

for i in itertools.count(1):
  if i % 2 == 0:
    print(i)
    input()

En este ejemplo lo que hacemos es un programa que nos imprime los número pares (en teoría hasta el infinito) hasta que lo cerremos. Para que continúe al siguiente número par sólo tenemos que pulsar una tecla.

Como veis el módulo es bastante interesante y puede ser de gran utilidad. Si os interesa os invito a que leáis más sobre él en la web de Python.

Python | itertools