我想在输入中找到数字对,然后总结这些数字对,但是忽略不成对的数字。我的意思是
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中。
答案 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。