itertools.accumulate() în Python

Modulul itertools Python 3.2+ (func: 3.3+, initial: 3.8+)

Produce totalurile parțiale (sume cumulate) sau alt rezultat acumulat pas cu pas.

Sintaxă
itertools.accumulate(iterabil, func=operator.add, *, initial=None)

Ce face itertools.accumulate()

accumulate([1, 2, 3, 4]) produce 1, 3, 6, 10: fiecare valoare este suma tuturor celor de până atunci. Cu func alegi altă operație: max (maximul de până atunci), operator.mul (produs cumulat) etc.

initial adaugă o valoare de pornire, care apare și ca prim element al rezultatului. Spre deosebire de functools.reduce(), care dă doar rezultatul final, accumulate() dă toți pașii intermediari.

Parametri

Parametru Descriere
iterabil Valorile.
func Opțional. Funcția cu două argumente. Implicit adunarea.
initial Opțional. Valoarea de pornire.

Ce returnează

Un iterator.

Exemple

Exemplul 1: Sold cumulat și maxim de până atunci

from itertools import accumulate
import operator
tranzactii = [500, -120, -80, 300, -50]
print(list(accumulate(tranzactii, initial=1000)))
temperaturi = [18, 21, 19, 24, 22]
print(list(accumulate(temperaturi, max)))
print(list(accumulate([1, 2, 3, 4, 5], operator.mul)))

Rezultat

[1000, 1500, 1380, 1300, 1600, 1550]
[18, 21, 21, 24, 24]
[1, 2, 6, 24, 120]

Greșeli frecvente

  • Folosești accumulate când ai nevoie doar de totalul final. Pentru asta ajung sum() sau functools.reduce().

Comenzi înrudite

  • functools.reduce(): Reduce o colecție la o singură valoare, aplicând repetat o funcție cu două argumente.
  • sum(): Adună toate numerele dintr-o colecție.
  • itertools.pairwise(): Produce perechile de elemente vecine: (a, b), (b, c), (c, d)…