如何使用列表推导式计算总和

新手上路,请多包涵

如何使用列表理解获取此列表的累计总和:

 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 许可协议

阅读 830
2 个回答

列表理解用于列表的映射或过滤。它们不能有内部状态,而这是您有效执行此操作所需要的。

然而在 Python 3 中有 itertools.accumulate 为此:

 import itertools

print(list(itertools.accumulate([1, 4, 9, 16])))  # [1,5,14,30]

原文由 Nils Werner 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题