如何使用列表理解获取此列表的累计总和:
list_comp=[1,4,9,16]
这是我尝试过的,但它打印了列表中每个项目的两倍
print([x+x for x in list_comp])
我希望结果是:list_comp=[1,5,14,30] 但我得到这个:
>> [2, 8, 18, 32]
原文由 bit 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何使用列表理解获取此列表的累计总和:
list_comp=[1,4,9,16]
这是我尝试过的,但它打印了列表中每个项目的两倍
print([x+x for x in list_comp])
我希望结果是:list_comp=[1,5,14,30] 但我得到这个:
>> [2, 8, 18, 32]
原文由 bit 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以这样做,结合切片和列表理解,但有效地进行累积和是笨拙的。
comp=[1,4,9,16]
[sum(comp[:idx+1]) for idx in range(len(comp))]
我不建议使用它,它会重新计算总和 n 次!
可以像这样完成 cumsum 的正确方法:
def cumsum(seq):
cumulative = [seq[0]]
for elt in seq[1:]:
cumulative.append(cumulative[-1] + elt)
return cumulative
itertools.accumulate
是@NielsWerner 展示的另一种方式。
可以通过 numpy
库和 cumsum
这个库的函数找到进一步的效率。
原文由 Reblochon Masque 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答4.3k 阅读✓ 已解决
2 回答864 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答867 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
4 回答2.6k 阅读
3 回答909 阅读✓ 已解决
列表理解用于列表的映射或过滤。它们不能有内部状态,而这是您有效执行此操作所需要的。
然而在 Python 3 中有
itertools.accumulate
为此: