Tabella dei contenuti: Mostra/Chiudi
La funzione reduce()
in python permette di far eseguire un'operazione ad ogni elemento iterabile inserito. Diversamente da python 2, reduce() non è più una funzione integrata in python 3 e la troviamo nel modulo functools
.
Perciò solamente in python 3, per utilizzare reduce(), dovremmo importarlo nel modo seguente:
from functools import reduce
Come funziona
Sintassi : functools.reduce(f, elemento_iterabile, [valore_iniziale])
dove valore_iniziale è un intero opzionale(se omesso è zero), mentre f
deve:
functools.reduce()
inizialmente prende i primi due valori dall'elemento iterabile e li manda in pasto alla funzione dichiarata, successivamente verranno passati ad essa il risultato ottenuto dall'ultima operazione eseguita, più il prossimo valore dell'elemento.
Esempi
Ecco un esempio giusto per chiarirvi le idee:
from functools import reduce
def moltiplica_elementi(elemento1, elemento2):
return elemento1 * elemento2
lista = [1, 2, 3, 4, 5]
risultato = reduce(moltiplica_elementi, lista)
print(risultato)
#output
120
Analizziamo le operazioni effettuate per ottenere 120:
Inizialmente vengono passati a moltiplica_elementi()
i primi due valori della lista: 1 e 2, che moltiplicandoli ritornano 3.
In seguito reduce()
non passa più altri due numeri della lista, bensì il risultato precedentemente ottenuto (3) e l'elemento successivo nella lista (3), ottenendo come risultato il prodotto di quest'ultimi e così via.
L'operazione potrebbe essere riassunta in questo modo:
>>> ((((1 * 2) * 3) * 4) * 5)
120
>>>
L'utilizzo di functools.reduce()
può essere un'alternativa più ottimizzata e leggibile di un for loop
. Di seguito il procedimento per ottenere lo stesso risultato precedente utilizzando un for loop
:
prodotto = 1
lista = [1, 2, 3, 4, 5]
for numero in lista:
prodotto *= numero
print(prodotto)
#output
120