2017-04-20 57 views
-1

我試過這個,因爲某些未知的原因,當它打印h時,它打印無,所以我認爲如果它計數無數量印製,然後除以2,它會給副本的數目,但我不能使用功能這裏算我想寫一個函數,它需要一個列表並返回列表中的重複元素總數的計數

a= [1,4,"hii",2,4,"hello","hii"] 
def duplicate(L): 
    li=[] 
    lii=[] 
    h="" 
    for i in L: 
     y= L.count(i) 
     if y>1: 
      h=y 
      print h 
      print h.count(None) 

duplicate(a) 
+0

這就是'collections.Counter'是。 – ForceBru

回答

0

可以使用set獲得獨特元素的個數,然後比較大小 - 類似的東西:

def duplicates(l): 
    uniques = set(l) 
    return len(l) - len(uniques) 
+0

請注意,如果您使用此代碼只會在元素在列表中最多顯示兩次時才正確。例如,如果'l = [1,1,1,1,2,2,3]'你會得到'4',但你只有2個重複的元素。 – eguaio

1

使用Counter容器:

from collections import Counter 
c = Counter(['a', 'b', 'a']) 

c現已與數據字典:Counter({'a': 2, 'b': 1})

如果你想獲得的所有重複的元素(不重複)的列表,你可以做如下:

duplicates = filter(lambda k: c[k] > 1, c.iterkeys()) 

如果你想只算重複的,那麼你可以設置

duplicates_len = len(duplicates) 
-1

egualo的答案好多了,但這是使用字典的另一種方式。

def find_duplicates(arr): 
    duplicates = {} 
    duplicate_elements = [] 

    for element in arr: 
     if element not in duplicates: 
      duplicates[element] = False 
     else: 
      if duplicates[element] == False: 
       duplicate_elements.append(element) 
      duplicates[element] = True 

     return duplicate_elements 

這非常簡單,並沒有通過列表兩次,這是一種很好。

>> test = [1,2,3,1,1,2,2,4] 
>> find_duplicates(test) 
[1, 2] 
+0

這要求列表中的元素是可散列的,以便能夠將它們用作字典中的鍵。 – eguaio

-1

我找到了答案是

a= [1,4,"hii",2,4,"hello",7,"hii"] 
def duplicate(L): 
    li=[] 
    for i in L: 
     y= L.count(i) 
     if y>1: 
      li.append(i) 
    print len(li)/2 

duplicate(a) 
相關問題