计算元组中重复数的总和

时间:2014-07-01 22:12:15

标签: python tuples

我有一个50个数字的元组,其数字为0 ... 9(重复),我想计算每个重复数字的总和,并为每个重复的数字创建一个新的元组。我怎么能在python中做到这一点。 (1,2,2,3,4,6,9,1,3,5,6,9,2,2,2,4,6,8,...... 9)..所以每次重复的总和数字像sumof2,sumof3 ...... !!!我知道如何继续。

2 个答案:

答案 0 :(得分:4)

尝试使用itertools.

中的groupby()功能
data = (1,2,2,2,3,3,...)
for key, group in groupby(data):
    print "The sum of ", key, " is ", sum(list(group))

如果你想在没有itertools的情况下这样做(因为原因),那么最好的方法是使用'remembering'变量。 (这段代码可能会被清理一下)

sums = []
prev = -1
curr_sum = 0

for element in data:
    if element != prev:
        if prev > 0:
            sums.append(curr_sum)
        curr_sum = 0
        prev = 0
    curr_sum += element

sums.append(curr_sum)

这将为您提供一系列总和。

或者,甚至还有字典!

sums = {}
for element in data:
    sums[element] = data.count(element) * element

# sums[4] = sum of 4s

答案 1 :(得分:1)

如果我正确地阅读了这个问题,也许collections.Counter可能会有所帮助。

根据我的理解,你想要一个与int值对应的元组内重复元素的总和?

这绝不是解决这个问题的有效方法,但希望它有所帮助。我从一个不同的问题中找到了这个答案,以帮助解决你的问题: How to count the frequency of the elements in a list? Answered by YOU

from collections import Counter
data = (0,1,2,3,4,5,6,7,8,9,2,2,3,4,5,6,......)
results = ()

test = sorted(data)
counter = Counter(data)
values = counter.values()
keys = counter.keys()

for i in range(0,len(keys)):
    results += ((keys[i],values[i]*keys[i]),)

print results