如何计算元组列表的累积和

4

我有一个元组列表,并想创建一个新列表,该列表包含前一列表索引的累加和:

List = [(1.0, 1.0), (3.0, 3.0), (5.0, 5.0)]

newList = [(1.0, 1.0), (4.0, 4.0), (9.0, 9.0)]

我正在使用:

l1 = []
for j in l: #already a given list
    result = tuple(map(sum, zip(j, j+1)))
    #or
    result = (map(operator.add, j, j+1,))
    l1.append(result)

两种情况(zipoperator)都返回:

"TypeError: 只能将元组(而不是“int”)与元组连接"

2个回答

5
你可以使用 itertools.accumulate
>>> import itertools
>>> itertools.accumulate([1, 3, 5])
<itertools.accumulate object at 0x7f90cf33b188>
>>> list(_)
[1, 4, 9]

它接受一个可选的func,用于执行加法操作:
>>> lst = [(1.0, 1.0), (3.0, 3.0), (5.0, 5.0)]
>>> import itertools
>>> list(itertools.accumulate(lst, lambda a, b: tuple(map(sum, zip(a, b)))))
[(1.0, 1.0), (4.0, 4.0), (9.0, 9.0)]

itertools.accumulate 是Python 3.2引入的。如果你使用的是低版本,可以使用以下的 accumulate(来自函数文档):

import operator
def accumulate(iterable, func=operator.add):
    it = iter(iterable)
    try:
        total = next(it)
    except StopIteration:
        return
    yield total
    for element in it:
        total = func(total, element)
        yield total

哦,我忘了提一下:我需要这个用于Python 2.7。Itertools累加似乎只在3.x中有效。 - verto
3
@verto,你的问题被标记为 [tag:python-3.x]。 - falsetru
1
@verto,我为您添加了函数“accumulate”。 - falsetru

0

没事了,可以用这段代码解决:

    result1=0
    result2=0
    l1=[]
    for k, v in l:
        result1+=k
        result2+=v
        l1.append((result1, result2))

非常感谢帮助!=)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接