我正在尝试将以下循环转换为理解力。
问题给出了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])
最佳答案
Python 3.8+解决方案:
:=
Assignment Expressions lst = [1, 2, 3, 4, 5]
curr = 1
out = [(curr:=curr*v) for v in lst]
print(out)
打印品:
[1, 2, 6, 24, 120]
其他解决方案(使用
itertools.accumulate
):from itertools import accumulate
out = [*accumulate(lst, lambda a, b: a*b)]
print(out)