itertools
itertools proporciona bloques de construcción de iteradores rápidos y eficientes en memoria: encadenamiento, segmentación, combinatoria y agrupación sin listas intermedias.
Busca en todas las páginas de la documentación
itertools proporciona bloques de construcción de iteradores rápidos y eficientes en memoria: encadenamiento, segmentación, combinatoria y agrupación sin listas intermedias.
from itertools import chain, islice, product
flat = chain([1, 2], [3, 4])
first_three = list(islice(range(10), 3))
pairs = list(product(["A", "B"], [1, 2]))Cuándo usar esto:
islice en un contador infinitofrom itertools import chain, groupby, islice, accumulate
def group_sorted(rows: list[tuple[str, int]]):
for key, group in groupby(rows, key=lambda r: r[0]):
yield key, sum(v for _, v in group)
def paginate(iterator, page_size: int):
page = 0
while True:
chunk = list(islice(iterator, page_size))
if not chunk:
break
yield page, chunk
page += 1
def running_totals(values):
return accumulate(values)
if __name__ == "__main__":
rows = [("a", 1), ("a", 2), ("b", 3)]
print(list(group_sorted(sorted(rows))))
print(list(paginate(iter(range(7)), 3)))
print(list(running_totals([1, 2, 3, 4])))Lo que esto demuestra:
groupby necesita ordenar primero por la misma función de claveislice toma de cualquier iterador sin len()paginate para APIs de streamingaccumulate produce reducciones en ejecución (suma por defecto)GROUP BY de SQL.| Función | Propósito |
|---|---|
chain | Concatenar iterables |
islice | Segmentar iterador |
groupby | Agrupación consecutiva |
product | Producto cartesiano |
zip_longest | Emparejar longitudes desiguales |
from itertools import pairwise # 3.10+
for a, b in pairwise([1, 2, 3]):
print(a, b)sorted(data, key=key) primero.product(count(), repeat=2) nunca termina. Solución: Limitar con islice.chain anidado.zip se detiene en el más corto; zip_longest necesita fillvalue para el relleno.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
bucles for anidados | Dos iterables pequeños | Muchas combinaciones; itertools es más claro |
| comprensiones de lista | Materializar resultado pequeño | Producto cruzado grande |
groupby de pandas | Análisis de DataFrames | Tuplas de Python simples |
more-itertools | Recetas adicionales (chunked) | Restricción de solo stdlib |
groupby solo agrupa claves adyacentes iguales; ordenar agrupa las claves iguales juntas.
islice funciona en iteradores sin acceso aleatorio ni len().
chain para iterables conocidos a la vez; yield from para delegación de generador con protocolo.
Perezoso; genera tuplas bajo demanda. Materializar un producto enorme dispara la memoria.
accumulate(values, func=operator.mul) para producto en ejecución, etc.
stdlib 3.10+; de lo contrario, el patrón zip(items, items[1:]).
Como map pero desempaqueta argumentos de tuplas: starmap(pow, [(2,3), (3,2)]).
Lo opuesto a filter; elementos donde pred es falso.
Necesita dos pasadas sobre el iterador sin almacenar todo; incurre en memoria de búfer.
combinations son subconjuntos insensibles al orden; permutations el orden importa.
reduce relacionado con accumulategenexpCounter con iterablesVersiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026