Ce face functools.reduce()
reduce(f, [a, b, c, d]) calculează f(f(f(a, b), c), d). Cu initial, calculul începe de la acea valoare, iar colecția goală returnează initial în loc de eroare.
Pentru operațiile uzuale există funcții mai clare: sum(), math.prod(), max(), "".join(), any(), all(). reduce rămâne utilă pentru combinații speciale (de exemplu unirea mai multor dicționare sau seturi).
Parametri
| Parametru | Descriere |
|---|---|
functie |
Funcția cu două argumente: acumulatorul și elementul curent. |
iterabil |
Elementele. |
initial |
Opțional. Valoarea de pornire. |
Ce returnează
Valoarea finală.
Exemple
Exemplul 1: Produs, maxim și unirea dicționarelor
from functools import reduce
import operator
print(reduce(operator.mul, [1, 2, 3, 4, 5]))
print(reduce(lambda a, b: a if a > b else b, [3, 9, 2]))
setari = [{"limba": "en"}, {"tema": "închisă"}, {"limba": "ro"}]
print(reduce(lambda a, b: a | b, setari, {}))
print(reduce(operator.add, [], 0))
Rezultat
120
9
{'limba': 'ro', 'tema': 'închisă'}
0
Greșeli frecvente
- Apelezi
reducepe o colecție goală fărăinitialși primeștiTypeError: reduce() of empty iterable with no initial value.
Comenzi înrudite
itertools.accumulate(): Produce totalurile parțiale (sume cumulate) sau alt rezultat acumulat pas cu pas.sum(): Adună toate numerele dintr-o colecție.math.prod() și math.sumprod(): Produsul tuturor elementelor și suma produselor a două liste (produs scalar).