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

问题给出了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)
    

    07-24 09:52
    查看更多