709 Stimmen

Wie finde ich die Duplikate in einer Liste und erstelle eine weitere Liste mit ihnen?

Wie finde ich die Duplikate in einer Liste mit ganzen Zahlen und erstelle eine weitere Liste mit den Duplikaten?

2 Stimmen

3 Stimmen

Wollen Sie die Duplikate einmalig oder jedes Mal, wenn sie wieder gesehen werden?

0 Stimmen

Ich denke, diese Frage wurde hier bereits sehr viel effizienter beantwortet. stackoverflow.com/a/642919/1748045 Schnittpunkt ist eine eingebaute Methode von set und sollte genau das tun, was erforderlich ist

6voto

yota Punkte 1680

Das dritte Beispiel der akzeptierten Antwort gibt eine falsche Antwort und versucht nicht, Duplikate zu geben. Hier ist die richtige Version:

number_lst = [1, 1, 2, 3, 5, ...]

seen_set = set()
duplicate_set = set(x for x in number_lst if x in seen_set or seen_set.add(x))
unique_set = seen_set - duplicate_set

5voto

user3109122 Punkte 81

Ein bisschen spät, aber vielleicht hilfreich für einige. Bei einer größeren Liste hat das für mich funktioniert.

l=[1,2,3,5,4,1,3,1]
s=set(l)
d=[]
for x in l:
    if x in s:
        s.remove(x)
    else:
        d.append(x)
d
[1,3,1]

Zeigt nur alle Duplikate an und behält die Reihenfolge bei.

4voto

Igor Vishnevskiy Punkte 1011

Ein sehr einfacher und schneller Weg, Duplikate mit einer Iteration in Python zu finden, ist:

testList = ['red', 'blue', 'red', 'green', 'blue', 'blue']

testListDict = {}

for item in testList:
  try:
    testListDict[item] += 1
  except:
    testListDict[item] = 1

print testListDict

Die Ausgabe wird wie folgt aussehen:

>>> print testListDict
{'blue': 3, 'green': 1, 'red': 2}

Dies und mehr in meinem Blog http://www.howtoprogramwithpython.com

0 Stimmen

Das ist eine Variante der Eimersorte.

4voto

Ich beteilige mich viel zu spät an dieser Diskussion. Trotzdem würde ich dieses Problem gerne mit Einzeilern behandeln. Denn das ist der Charme von Python. Wenn wir nur die Duplikate in eine separate Liste (oder eine beliebige Sammlung) bekommen wollen, würde ich vorschlagen, wie folgt zu verfahren: Sagen wir, wir haben eine duplizierte Liste, die wir als 'Ziel' bezeichnen können

    target=[1,2,3,4,4,4,3,5,6,8,4,3]

Wenn wir nun die Duplikate erhalten wollen, können wir den One-Liner wie unten verwenden:

    duplicates=dict(set((x,target.count(x)) for x in filter(lambda rec : target.count(rec)>1,target)))

Mit diesem Code werden die doppelten Datensätze als Schlüssel und die Anzahl als Wert in das Wörterbuch "Duplikate" eingetragen. Das Wörterbuch "Duplikate" sieht dann wie folgt aus:

    {3: 3, 4: 4} #it saying 3 is repeated 3 times and 4 is 4 times

Wenn Sie nur alle Datensätze mit Duplikaten allein in einer Liste haben wollen, ist der Code wieder viel kürzer:

    duplicates=filter(lambda rec : target.count(rec)>1,target)

Die Ausgabe wird sein:

    [3, 4, 4, 4, 3, 4, 3]

Dies funktioniert perfekt in Python 2.7.x + Versionen

3voto

Sundeep471 Punkte 1383

Methode 1:

list(set([val for idx, val in enumerate(input_list) if val in input_list[idx+1:]]))

Erläuterung: [val for idx, val in enumerate(input_list) if val in input_list[idx+1:]] ist ein Listenverständnis, das ein Element zurückgibt, wenn das gleiche Element ab seiner aktuellen Position in der Liste, dem Index, vorhanden ist.

Beispiel: input_list = [42,31,42,31,3,31,31,5,6,6,6,6,6,7,42]

Beginnend mit dem ersten Element in der Liste, 42, mit Index 0, wird geprüft, ob das Element 42 in input_list[1:] vorhanden ist (d. h. von Index 1 bis zum Ende der Liste) Da 42 in input_list[1:] vorhanden ist, wird 42 zurückgegeben.

Dann geht es zum nächsten Element 31 mit dem Index 1 und prüft, ob das Element 31 in der input_list[2:] (d.h. von Index 2 bis zum Ende der Liste) vorhanden ist, Da 31 in input_list[2:] vorhanden ist, wird 31 zurückgegeben.

ähnlich geht es durch alle Elemente in der Liste, und gibt nur die wiederholten/duplizierten Elemente in einer Liste zurück.

Dann, weil wir Duplikate haben, in einer Liste, müssen wir eine von jedem Duplikat, d.h. entfernen Sie Duplikat unter Duplikate, und um dies zu tun, rufen wir eine Python built-in namens set(), und es entfernt die Duplikate,

Dann haben wir zwar eine Menge, aber keine Liste, und um eine Menge in eine Liste umzuwandeln, verwenden wir list(), und das wandelt die Menge der Elemente in eine Liste um.

Methode 2:

def dupes(ilist):
    temp_list = [] # initially, empty temporary list
    dupe_list = [] # initially, empty duplicate list
    for each in ilist:
        if each in temp_list: # Found a Duplicate element
            if not each in dupe_list: # Avoid duplicate elements in dupe_list
                dupe_list.append(each) # Add duplicate element to dupe_list
        else: 
            temp_list.append(each) # Add a new (non-duplicate) to temp_list

    return dupe_list

Erläuterung: Hier erstellen wir zunächst zwei leere Listen. Dann durchlaufen wir alle Elemente der Liste, um zu sehen, ob es in temp_list (anfangs leer) existiert. Wenn es in temp_list nicht vorhanden ist, dann fügen wir es zu temp_list hinzu, indem wir anhängen. Methode.

Wenn es bereits in temp_list vorhanden ist, bedeutet dies, dass das aktuelle Element der Liste ein Duplikat ist, und daher müssen wir es zu dupe_list hinzufügen, indem wir anhängen. Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X