在输入中查找相同的数字并对配对的数字求和

时间:2015-10-03 04:28:27

标签: python algorithm

我想在输入中找到数字对,然后总结这些数字对,但是忽略不成对的数字。我的意思是

8 8 8 = 16
8 8 8 8 8 = 32

所以带有一对两个的数字将被计算,但是没有一对的数字将不会被计算。对不起,如果我说这个奇怪,我不知道如何解释它,但这个例子会有所帮助。

例如:

8 3 4 4 5 9 9 5 2

输出:

36

4 + 4 + 5 + 5 + 9 + 9 = 36

在Python中。

2 个答案:

答案 0 :(得分:3)

使用collections.Counter

>>> import collections
>>> s = "8 3 4 4 5 9 9 5 2"
>>> l = s.split()
>>> sum([int(item)*count for item, count in collections.Counter(l).items() if count > 1])
36

>>> s = "8 3 4 4 5 9 9 5 2"
>>> l = s.split()
>>> sum([int(item)*count for item, count in collections.Counter(l).items() if count%2 == 0])

36

答案 1 :(得分:1)

作为答案的修正@ avinash-raj给出了:

import collections
s = "8 3 4 4 5 9 9 5 2"
l = s.split()
print(sum([int(item) * 2 * (count // 2) for item, count in collections.Counter(l).items()]))

作为解释:

  • 我们将所有数字清空到Counter,这会告诉我们看到某个键的次数

  • 表达式(count // 2)是整数除法,它给出了完整对的数量。因此,如果我们看到一个密钥9次,(count // 2) - > 9 / 2 - > 4。