itertools en Python: guía práctica para iterar mejor

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
Introdução ao módulo itertools para iniciantes em Python

itertools es un módulo de la biblioteca estándar de Python que reúne herramientas para trabajar con iteradores de forma eficiente. Permite combinar secuencias, generar valores infinitos, agrupar elementos, crear combinaciones y evitar listas temporales innecesarias. Su mayor ventaja es que muchas funciones producen resultados bajo demanda, lo que reduce memoria y facilita construir flujos de procesamiento.

Qué es un iterador

Un iterador entrega un elemento cada vez y recuerda su posición. Las listas pueden recorrerse muchas veces, mientras que un iterador suele consumirse. Comprender esta diferencia ayuda a evitar resultados vacíos después de una primera pasada.

iterador = iter([10, 20, 30])
print(next(iterador))
print(next(iterador))

Para reforzar colecciones e iteración, revisa la guía de listas en Python.

Importar itertools

El módulo no necesita instalación:

import itertools

También puedes importar funciones concretas:

from itertools import chain, count, combinations

La documentación oficial de itertools agrupa las herramientas en iteradores infinitos, combinatorios y terminadores sobre iterables.

count para secuencias numéricas

count genera números sin final hasta que el consumidor se detiene:

from itertools import count

for numero in count(start=10, step=5):
    print(numero)
    if numero >= 30:
        break

Siempre limita un iterador infinito con break, islice u otra condición.

cycle para repetir elementos

cycle repite una secuencia indefinidamente:

from itertools import cycle, islice

colores = cycle(["rojo", "verde", "azul"])
print(list(islice(colores, 7)))

Es útil para asignar estilos, turnos o recursos de forma circular. Recuerda que necesita conservar una copia de los elementos vistos para poder repetirlos.

repeat para reutilizar un valor

repeat produce el mismo objeto varias veces:

from itertools import repeat

for mensaje in repeat("procesando", 3):
    print(mensaje)

También puede combinarse con map cuando una función necesita un argumento constante.

chain para unir iterables

chain recorre varios iterables como si fueran uno:

from itertools import chain

enero = [10, 20]
febrero = [30, 40]
marzo = [50]

for venta in chain(enero, febrero, marzo):
    print(venta)

No crea primero una lista combinada. Esto es útil cuando las entradas son grandes o generadores.

chain.from_iterable

Cuando ya tienes una colección de colecciones:

grupos = [[1, 2], [3, 4], [5]]
planos = chain.from_iterable(grupos)
print(list(planos))

Evita bucles anidados simples y comunica claramente la intención de aplanar un nivel.

islice para limitar iteradores

islice aplica una lógica parecida al slicing sin exigir una secuencia completa:

from itertools import islice

primeros = islice(range(1_000_000), 10, 20, 2)
print(list(primeros))

Es especialmente útil con archivos, generadores e iteradores infinitos.

combinations y permutations

combinations genera grupos sin considerar el orden:

from itertools import combinations

personas = ["Ana", "Luis", "Marta"]
print(list(combinations(personas, 2)))

permutations sí considera el orden:

from itertools import permutations

print(list(permutations([1, 2, 3], 2)))

El número de resultados puede crecer muy rápido. Evita convertir grandes combinaciones en una lista. Itera y detente cuando encuentres lo necesario.

product para producto cartesiano

product combina cada elemento de un iterable con todos los del otro:

from itertools import product

tamanos = ["S", "M"]
colores = ["negro", "blanco"]

for variante in product(tamanos, colores):
    print(variante)

Puede usarse en pruebas parametrizadas, configuraciones y generación de casos.

accumulate para resultados progresivos

accumulate genera acumulados:

from itertools import accumulate

ventas = [100, 50, 75]
print(list(accumulate(ventas)))

También acepta una función, por ejemplo max, para producir máximos acumulados.

groupby y el requisito del orden

groupby agrupa elementos consecutivos con la misma clave:

from itertools import groupby

registros = [
    {"tipo": "A", "valor": 1},
    {"tipo": "A", "valor": 2},
    {"tipo": "B", "valor": 3},
]

for tipo, grupo in groupby(registros, key=lambda item: item["tipo"]):
    print(tipo, list(grupo))

Si los registros no están ordenados por la misma clave, un tipo puede aparecer en varios grupos. Ordena antes cuando necesites agrupación global.

tee para duplicar un iterador

tee crea iteradores independientes a partir de uno:

from itertools import tee

origen = iter([1, 2, 3])
a, b = tee(origen, 2)
print(list(a))
print(list(b))

Internamente necesita almacenar temporalmente valores cuando una copia avanza más que otra. Si la diferencia es enorme, el consumo de memoria puede crecer.

zip_longest para longitudes diferentes

La función zip termina con el iterable más corto. zip_longest continúa y completa valores ausentes:

from itertools import zip_longest

nombres = ["Ana", "Luis", "Marta"]
notas = [9, 8]

for nombre, nota in zip_longest(nombres, notas, fillvalue="sin nota"):
    print(nombre, nota)

La guía de zip en Python explica la función incorporada y el desempaquetado.

Integrar itertools con funciones

Las herramientas del módulo son más fáciles de reutilizar cuando cada transformación está separada. Consulta la guía de funciones en Python para organizar pipelines legibles.

Memoria y evaluación perezosa

La mayoría de los resultados no se calcula hasta que se solicita. Esto permite procesar entradas grandes sin guardarlas completas. Sin embargo, convertir con list() elimina esa ventaja. Si tu programa enfrenta límites de memoria, revisa cómo corregir MemoryError.

Programación funcional

itertools combina bien con generadores, map, filter y funciones pequeñas. El HOWTO oficial de programación funcional explica iteradores, generadores y patrones relacionados.

Errores frecuentes

Los problemas comunes son olvidar que un iterador se consume, dejar un iterador infinito sin límite, convertir millones de combinaciones en una lista, usar groupby sin ordenar y duplicar con tee iteradores que avanzan a velocidades muy diferentes.

Buenas prácticas

Empieza con la operación más simple que exprese la intención. Mantén los iteradores como iteradores hasta el último momento, limita resultados infinitos y mide antes de optimizar. itertools no reemplaza todos los bucles, pero ofrece componentes probados para construir iteraciones compactas, eficientes y fáciles de combinar.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Uso do módulo collections para estruturas avançadas em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo collections en Python: deque, Counter y más

    Aprende collections en Python con Counter, defaultdict, deque, namedtuple, ChainMap y buenas prácticas para elegir estructuras eficientes.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação moderna de arquivos usando pathlib em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Pathlib en Python: rutas y archivos de forma moderna

    Aprende pathlib en Python para crear rutas, leer y escribir archivos, recorrer carpetas, filtrar extensiones, renombrar y organizar datos.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Manipulação de arquivos e pastas usando módulo os em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Módulo os en Python: archivos, carpetas y entorno

    Aprende el módulo os en Python para listar, crear, renombrar y eliminar archivos, recorrer carpetas, manejar rutas y leer variables

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso do Counter do collections para contar elementos em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Counter en Python: contar elementos con collections

    Aprende Counter en Python para contar elementos, encontrar valores frecuentes, actualizar conteos, comparar resultados y analizar datos reales.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Logo do Python com expressão pensativa sobreposto a uma biblioteca com estantes cheias de livros, representando o conceito de bibliotecas em Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Bibliotecas de Python: qué son y cómo usarlas

    Aprende qué son las bibliotecas de Python, cómo se relacionan con módulos y paquetes, cómo instalarlas con pip y cómo

    Ler mais

    Tempo de leitura: 6 minutos
    11/07/2026
    Estatísticas e análise de dados com Python
    Bibliotecas y Módulos
    Foto de perfil de Leandro Hirt da Academify

    Funciones integradas de Python: guía práctica

    Aprende las funciones integradas de Python para entrada, conversión, colecciones, iteración, ordenación, validación, archivos e inspección.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026