itertools.accumulate: sumas y estados acumulados

Publicado el: 30/08/2026
Tempo de leitura: 2 minutos
Close-up of hands typing on a laptop keyboard, Python book in sight, coding in progress.

itertools.accumulate() produce resultados acumulados mientras recorre un iterable. Por defecto calcula sumas progresivas, pero también acepta multiplicación, máximo, mínimo o una transición de estado personalizada. Como devuelve un iterador, funciona bien en pipelines y streams grandes.

Esta guía cubre totales acumulados, initial, funciones de operator, saldos, récords progresivos, medias y riesgos con estado mutable.

Suma acumulada

from itertools import accumulate

valores = [10, 5, -2, 8]
print(list(accumulate(valores)))
# [10, 15, 13, 21]

Cada salida combina el acumulado anterior con el siguiente elemento.

Valor inicial

print(list(accumulate([5, 7, 3], initial=100)))
# [100, 105, 112, 115]

El valor inicial se emite primero, algo útil para saldos, posiciones y estados anteriores al primer evento.

Producto acumulado

from operator import mul

print(list(accumulate([2, 3, 4], mul)))
# [2, 6, 24]

Máximo progresivo

temperaturas = [18, 20, 19, 24, 22]
print(list(accumulate(temperaturas, max)))
# [18, 20, 20, 24, 24]

Saldos después de movimientos

movimientos = [200, -50, -25, 100]
saldos = accumulate(movimientos, initial=1000)
for saldo in saldos:
    print(saldo)

Transición personalizada

def limitar(actual, cambio):
    return max(0, actual + cambio)

estados = accumulate([-3, 8, -20, 5], limitar, initial=10)

La función recibe el estado acumulado y el siguiente elemento, y devuelve el nuevo estado.

Procesamiento lazy

accumulate calcula valores solo cuando se solicitan. Puede combinarse con islice, filtros y otras herramientas de itertools.

from itertools import accumulate, islice

primeros = islice(accumulate(eventos(), actualizar_estado), 100)

Media acumulada

def actualizar(estado, valor):
    total, cantidad = estado
    return total + valor, cantidad + 1

estados = accumulate([10, 20, 15], actualizar, initial=(0, 0))
medias = [total / cantidad for total, cantidad in estados if cantidad]

Preferir estados inmutables

Si la función modifica y devuelve la misma lista o diccionario, todos los resultados pueden referirse al mismo objeto. Usa tuplas, dataclasses frozen o copias explícitas.

accumulate frente a sum

sum devuelve únicamente el total final. accumulate expone cada estado intermedio.

accumulate frente a reduce

functools.reduce combina elementos, pero produce un único resultado. Elige accumulate cuando la evolución completa sea importante.

Precisión numérica

Las sumas largas de floats pueden acumular errores de redondeo. Para valores decimales usa decimal.Decimal. math.fsum puede mejorar un total final de floats, aunque no genera estados intermedios.

Errores comunes

  • Olvidar que initial añade una salida.
  • Invertir los argumentos de la función acumuladora.
  • Modificar el mismo objeto de estado.
  • Convertir un resultado infinito en lista.
  • Esperar un escalar en vez de un iterador.

Buenas prácticas

Mantén la transición pura, usa estados pequeños e inmutables, documenta el valor inicial y consume el iterador progresivamente. Consulta las guías internas de itertools, groupby y pairwise.

Conclusión

itertools.accumulate es una herramienta compacta para totales progresivos y transiciones de estado. Su diseño lazy permite pipelines de bajo consumo de memoria.

Fuentes externas

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Código Python en un portátil para filtrar valores None
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    operator.is_none: filtra None sin perder falsy

    Aprende operator.is_none e is_not_none para filtrar None sin eliminar valores falsy válidos en Python.

    Ler mais

    Tempo de leitura: 4 minutos
    23/10/2026
    Código Python en un portátil para crear dataclasses dinámicas
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    make_dataclass decorator: transforma dataclasses

    Aprende a usar el parámetro decorator de make_dataclass para validar, registrar y transformar dataclasses dinámicas en Python.

    Ler mais

    Tempo de leitura: 6 minutos
    23/10/2026
    Estructura de código y XML para canonicalización con Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    ElementTree canonicalize: normaliza XML en Python

    Aprende ElementTree canonicalize en Python para comparar XML, generar hashes estables y controlar namespaces, espacios y comentarios.

    Ler mais

    Tempo de leitura: 5 minutos
    22/10/2026
    Código Python en una pantalla
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    T-strings y templatelib: interpolación estructurada

    Aprende t-strings y string.templatelib en Python para interpolación estructurada, renderizado seguro, logs y procesamiento personalizado.

    Ler mais

    Tempo de leitura: 6 minutos
    22/10/2026
    Base SQLite y código Python para exportación selectiva con iterdump
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    SQLite iterdump: crea dumps selectivos en Python

    Aprende sqlite3.Connection.iterdump con filtro para crear dumps SQLite selectivos, validar dependencias y restaurar con seguridad.

    Ler mais

    Tempo de leitura: 4 minutos
    21/10/2026
    Código y archivos que representan compresión de datos con Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    compression.zstd: Zstandard rápido en Python

    Aprende compression.zstd en Python para comprimir archivos y datos con velocidad, streaming, integridad y seguridad.

    Ler mais

    Tempo de leitura: 7 minutos
    21/10/2026