计算元组中重复数字的和

-1 投票
2 回答
1389 浏览
提问于 2025-04-18 11:48

我有一个包含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

撰写回答