如何使用列表理解计算列表的累积乘积

rid*_*dua 8 python list-comprehension list

我正在尝试将以下循环转换为理解。

问题是input_list = [1, 2, 3, 4, 5] 返回一个列表,其中每个元素都是所有元素的倍数,直到该索引从左到右开始。

因此返回列表将是[1, 2, 6, 24, 120].

我拥有的正常循环(并且正在运行):

l2r = list()
for i in range(lst_len):
    if i == 0:
        l2r.append(lst_num[i])
    else:
        l2r.append(lst_num[i] * l2r[i-1])
Run Code Online (Sandbox Code Playgroud)

And*_*ely 13

Python 3.8+ 解决方案:

lst = [1, 2, 3, 4, 5]

curr = 1
out = [(curr:=curr*v) for v in lst]
print(out)
Run Code Online (Sandbox Code Playgroud)

印刷:

[1, 2, 6, 24, 120]
Run Code Online (Sandbox Code Playgroud)

其他解决方案(带itertools.accumulate):

from itertools import accumulate

out = [*accumulate(lst, lambda a, b: a*b)]
print(out)
Run Code Online (Sandbox Code Playgroud)