【问题标题】:Python: Sum Immediate Duplicates in List [duplicate]Python:在列表中求和立即重复项[重复]
【发布时间】:2019-09-10 02:10:17
【问题描述】:

假设您有一个如下列表:

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

我想做的是使用标准 Python 库(即不是 numpy),将所有直接重复的内容加在一起。对两组 1 和一组 6 求和,结果应该是(强调在求和的地方加上):

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

如何做到这一点?

【问题讨论】:

  • 这应该很简单,要么显式循环列表并检查重复项,要么使用 itertools 中的groupby。如果你分享你的尝试,我相信你会得到帮助,但 SO 不是“请为我写一些代码”类型的问题 [大声笑,在发表我的评论后 30 秒内,出现 3 个答案 - 2 个使用 groupby,1 个使用循环...]

标签: python python-3.x list duplicates


【解决方案1】:

您可以使用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]

【讨论】:

    【解决方案2】:

    循环数据,如果相同则添加到临时列表中,否则添加临时列表的总和 - 执行直到完成。

    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 更短,但需要导入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2012-12-12
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2020-08-09
      • 2020-02-01
      相关资源
      最近更新 更多