2017-10-05 94 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))