functools.reduce() în Python

Modulul functools Python 3.0+

Reduce o colecție la o singură valoare, aplicând repetat o funcție cu două argumente.

Sintaxă
functools.reduce(functie, iterabil[, initial])

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 reduce pe o colecție goală fără initial și primești TypeError: reduce() of empty iterable with no initial value.

Comenzi înrudite