Python:汇总列表中的立即重复项

时间:2019-04-19 21:26:25

标签: python python-3.x list duplicates

假设您的列表如下:

[1,1,1,2,3,1,1,5,6,6,10]

使用标准Python库(即不是numpy),我想做的是将所有立即重复项加在一起。将两组1s和一组6s进行求和,结果应为(强调加在求和的位置):

[**3**,2,3,**2**,5,**12**,10]

这怎么实现?

2 个答案:

答案 0 :(得分:3)

您可以使用itertools.groupby对输出组求和:

from itertools import groupby
l = [1,1,1,2,3,1,1,5,6,6,10]
print([sum(g) for _, g in groupby(l)])

这将输出:

[3, 2, 3, 2, 5, 12, 10]

答案 1 :(得分:0)

遍历数据,如果相同则添加到临时列表,如果不相同则添加临时列表的总和-直到完成。

data = [1,1,1,2,3,1,1,5,6,6,10]

result = []
temp = [data[0]]
for d in data[1:]:        
    if temp[-1] == d:      # same as temp currently collects?
        temp.append(d)
    else:
        result.append(sum(temp))
        temp = [d]         # collect the new ones

result.append(sum(temp))        
print(result)  # [3, 2, 3, 2, 5, 12, 10]

使用itertools.groupby较短,但需要导入。