2017-10-05 70 views
1

我知道已经有很多关于这个特定主题的问题,但我找不到适合我的问题的解决方案。统计列表中元素的发生

我输入:

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

您可以使用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}) 
>>> 

它计算出现次数的数量,并返回键的字典表明该项目,值出现次数的数量。

如果你只需要知道,如果有复制与否,无论哪个项目是重复的,你可以简单地使用Set在你的清单,并检查len()算账:

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

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))