是否有一种简单的方法可以使用列表推导对列表中的所有相似值进行求和?
即。输入:
[1, 2, 1, 3, 3]
预期产出:
[6, 2, 2] (sorted)
我尝试使用zip,但它仅适用于最多2个类似的值:
[x + y for (x, y) in zip(l[:-1], l[1:]) if x == y]
答案 0 :(得分:7)
您可以使用计数器。
from collections import Counter
[x*c for x,c in Counter([1, 2, 1, 3, 3]).items()]
答案 1 :(得分:3)
from itertools import groupby
a=[1, 2, 1,1,4,5,5,5,5, 3, 3]
print sorted([sum(g) for i,g in groupby(sorted(a))],reverse=True)
#output=[20, 6, 4, 3, 2]
代码解释
首先使用sorted(a)
执行groupby制作类似元素组
sum()
答案 2 :(得分:0)
您可以使用collections.Counter
,这需要O(N)
时间。:
>>> from collections import Counter
>>> lst = [1, 2, 1, 3, 3]
>>> [k*v for k, v in Counter(lst).iteritems()]
[2, 2, 6]
此处Counter()
返回每个唯一商品的计数,然后我们将这些数字与其数量相乘得到总和。