计算元组中重复数字的和
我有一个包含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 个回答
1
也许 collections.Counter 可以在这种情况下帮到你,如果我理解你的问题没错的话。
根据我的理解,你想要的是一个元组中重复元素的总和,并且这些元素对应着一个整数值,对吧?
这并不是解决这个问题的高效方法,但希望能对你有所帮助。我找到了一种不同问题的答案,可以帮助你解决这个问题:如何计算列表中元素的频率?由你回答
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
4
试试使用 groupby()
这个函数,它在 itertools 这个库里。
data = (1,2,2,2,3,3,...)
for key, group in groupby(data):
print "The sum of ", key, " is ", sum(list(group))
如果你想在不使用 itertools 的情况下做到这一点(可能有你的理由),那么最好的方法就是使用一个“记住”的变量。(这段代码可能还可以稍微整理一下)
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