我有一个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 ...... !!!我知道如何继续。
答案 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