我有一个看起来像这样的元组列表:
lst = [(0, 0), (2, 3), (4, 3), (5, 1)]
Run Code Online (Sandbox Code Playgroud)
积累第一个和第二个元组元素之和的最佳方法是什么?使用上面的示例,我正在寻找生成此列表的最佳方法:
new_lst = [(0, 0), (2, 3), (6, 6), (11, 7)]
Run Code Online (Sandbox Code Playgroud)
我正在寻找Python 2.6中的解决方案
Gar*_*tty 13
我认为最好的解决方案是itertools.accumulate()累积值,并使用zip()拆分列并将它们合并.这意味着生成器只处理单个列,并使该方法完全可伸缩.
>>> from itertools import accumulate
>>> lst = [(0, 0), (2, 3), (4, 3), (5, 1)]
>>> list(zip(*map(accumulate, zip(*lst))))
[(0, 0), (2, 3), (6, 6), (11, 7)]
Run Code Online (Sandbox Code Playgroud)
我们zip()用来取列,然后应用于itertools.accumulate()每一列,然后用zip()它们将它们合并回原始格式.
此方法适用于任何可迭代的,而不仅仅是序列,并且应该相对有效.
在3.2之前,累积可以定义为:
def accumulate(iterator):
total = 0
for item in iterator:
total += item
yield total
Run Code Online (Sandbox Code Playgroud)
(文档页面提供了更通用的实现,但对于这个用例,我们可以使用这个简单的实现).