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
accumulatecând ai nevoie doar de totalul final. Pentru asta ajungsum()saufunctools.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)…