计算列表

时间:2017-10-05 07:48:41

标签: python list counter

我知道关于这个特定主题已经有很多问题,但我找不到适合我问题的解决方案。

我有输入:

2, 20, 15, 16, 17, 3, 8, 10, 7

我想看看我的代码中是否有“双重”数字。我试过使用这段代码。

lijst = input('Give a list:  ')
teller = 0
for i in lijst.split(','):
    if lijst.count(i) != 1:
        teller += 1
print(teller != 0)

通常我应该得到False,因为给定列表中没有双重数字。但是,我接受了True。我建议那是因为2也出现在20。

True

有谁知道如何避免这个问题,所以'2'不计算两次?

2 个答案:

答案 0 :(得分:2)

您可以使用collections.Counter来完成

>>> data = [2, 20, 15, 16, 17, 3, 8, 10, 7]
>>> from collections import Counter
>>> Counter(data)
Counter({2: 1, 3: 1, 7: 1, 8: 1, 10: 1, 15: 1, 16: 1, 17: 1, 20: 1})
>>> 

计算出现次数并返回带有键的dict指示项目,值为出现次数。

如果您只是需要知道是否有重复,无论重复哪个项目,您只需在列表上使用Set并查看len()算账:

len(data) == len(set(data))

答案 1 :(得分:1)

您可以将输入的长度与输入中唯一元素集的长度进行比较:

def has_repeated_elements(input):
    """returns True if input has repeated elements,
    False otherwise"""
    return len(set(input)) != len(input)

print(not has_repeated_elements(input))