Theo như tôi hiểu, hàm reduce lấy một danh sách l
và một hàm f
. Sau đó, nó gọi hàm f
trên hai phần tử đầu tiên của danh sách và sau đó liên tục gọi hàm f
với phần tử danh sách tiếp theo và kết quả trước đó.Chức năng giảm hoạt động như thế nào?
Vì vậy, tôi xác định các chức năng sau:
Hàm sau đây tính giai thừa.
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)
Bây giờ, điều này có nên cho tôi ((1! * 3!) * 1!) = 6
không? Nhưng thay vào đó, nó cung cấp cho 720
. Tại sao lại là 720
? Dường như có giai thừa của 6
. Nhưng, tôi cần hiểu tại sao.
Ai đó có thể giải thích lý do tại sao điều này xảy ra và xung quanh công việc?
Tôi về cơ bản muốn tính sản phẩm giai thừa của tất cả các mục nhập trong danh sách. Kế hoạch sao lưu là chạy vòng lặp và tính toán nó. Nhưng, tôi thích sử dụng giảm.
Cảm ơn mọi người. Tôi đã tìm ra điều ngớ ngẩn mà tôi đã bỏ lỡ. Và tôi đã đăng đúng cách để làm điều này trong các câu trả lời. – Divya
Để hiểu rõ hơn về * giảm *, hãy xem phần tương đương python thuần túy được hiển thị bên dưới. –