Per quanto ho capito, la funzione di riduzione prende una lista l
e una funzione f
. Quindi, chiama la funzione f
sui primi due elementi dell'elenco e quindi chiama ripetutamente la funzione f
con l'elemento dell'elenco successivo e il risultato precedente.Come funziona la funzione di riduzione?
Così, ho definire le seguenti funzioni:
La seguente funzione calcola il fattoriale.
def fact(n):
if n == 0 or n == 1:
return 1
return fact(n-1) * n
def reduce_func(x,y):
return fact(x) * fact(y)
lst = [1, 3, 1]
print reduce(reduce_func, lst)
Ora, questo non dovrebbe darmi ((1! * 3!) * 1!) = 6
? Ma, invece, dà 720
. Perché 720
? Sembra prendere anche il fattoriale di 6
. Ma, ho bisogno di capire perché.
Qualcuno può spiegare perché questo accada e una soluzione?
Principalmente voglio calcolare il prodotto di fattoriali di tutte le voci nell'elenco. Il piano di backup è di eseguire un ciclo e calcolarlo. Ma preferirei usare ridurre.
Grazie a tutti. Ho capito la cosa sciocca che mi mancava. E ho pubblicato il modo corretto per farlo nelle risposte. – Divya
Per una comprensione più approfondita di * reduce *, vedere il suo equivalente in python puro mostrato di seguito. –