Bạn biết hàm reduce
tiện dụng bằng Python. Ví dụ, bạn có thể sử dụng nó để tổng hợp một danh sách như vậy (giả vờ không có built-in sum):reducelist trong Python: như giảm nhưng đưa ra danh sách các kết quả trung gian
reduce(lambda x,y: x+y, [1,2,3,4], 0)
trả về (((0 + 1) 2) 3) + 4 = 10.
Bây giờ nếu tôi muốn danh sách các khoản tiền trung gian thì sao? Trong trường hợp này, [1,3,6,10]
.
Đây là giải pháp xấu. Có cái gì đó thêm pythonic?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
FYI, ít nhất trong Haskell, điều này được gọi là * scan *. Giảm còn được gọi là (một loại cụ thể) * gấp * trong thế giới lập trình chức năng. – delnan
Cảm ơn delnan, yeah, tôi biết điều này là FoldList từ Mathematica. Mathematica có một phiên bản tích lũy của rất nhiều chức năng lập trình chức năng này, được biểu thị bằng cách thêm vào "Danh sách". Tôi thấy từ câu trả lời dưới đây rằng trong Python 3 cái mà tôi gọi là reducelist bây giờ đã có sẵn như là tích lũy(). – dreeves