Por lo que yo entiendo, la función reducir toma una lista l
y una función f
. Luego, llama a la función f
en los dos primeros elementos de la lista y luego llama repetidamente a la función f
con el siguiente elemento de lista y el resultado anterior.¿Cómo funciona la función de reducción?
Por lo tanto, definen las siguientes funciones:
La siguiente función calcula el factorial.
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)
Ahora, ¿no debería darme esto ((1! * 3!) * 1!) = 6
? Pero, en su lugar, da 720
. ¿Por qué 720
? Parece tomar el factorial de 6
también. Pero, necesito entender por qué.
¿Alguien puede explicar por qué sucede esto y una solución temporal?
Básicamente quiero calcular el producto de factoriales de todas las entradas en la lista. El plan de copia de seguridad es ejecutar un ciclo y calcularlo. Pero, preferiría usar reducir.
Gracias a todos. Descubrí la tontería que me perdí. Y he publicado la forma correcta de hacer esto en las respuestas. – Divya
Para una comprensión más profunda de * reduce *, consulte su equivalente de python puro que se muestra a continuación. –