2017-04-20 3 views
-1

Ich habe versucht, aus unbekannten Gründen, wenn es druckt h, druckt es keine, also dachte ich, wenn es zählt die Anzahl der Nicht gedruckt dann durch 2 geteilt wird, die Anzahl der Duplikate geben, aber ich kann nicht funktionieren hierIch möchte eine Funktion schreiben, die eine Liste nimmt und eine Zählung der Gesamtzahl der doppelten Elemente in der Liste

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

Dies ist, was 'collections.Counter' für ist. – ForceBru

Antwort

0

Sie können eine set verwenden zählen verwenden, um die Anzahl der eindeutigen Elemente zu bekommen, und dann die Größen vergleichen - etwas wie das:

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

Vorsicht, wenn Sie diesen Code verwenden, ist er nur korrekt, wenn die Elemente höchstens zweimal in der Liste erscheinen. Zum Beispiel, wenn 'l = [1,1,1,1,2,2,3] 'Sie erhalten' 4', aber Sie haben nur 2 Elemente, die wiederholt werden. – eguaio

1

Verwenden Sie die Counter Behälter:

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

c ist nun ein Wörterbuch mit den Daten: Counter({'a': 2, 'b': 1})

Wenn Sie eine Liste mit allen duplizierten Elemente erhalten möchten (ohne Wiederholung), die Sie tun können, wie folgt:

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

Wenn Sie nur wollen, um die Duplikate zählen, können Sie dann setzen gerade

duplicates_len = len(duplicates) 
-1

die Antwort von Egualo ist viel besser, aber hier ist ein anderer Weg mit einem Wörterbuch.

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 

Es ist ziemlich einfach und geht nicht zweimal durch die Listen, die irgendwie nett ist.

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

Dies erfordert, dass die Elemente in der Liste als Hashwerte verwendet werden können, um sie als Schlüssel im Wörterbuch verwenden zu können. – eguaio

-1

fand ich eine Antwort, die

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