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

9voto

firelynx Punkte 28306

Ich würde das mit Pandas machen, denn ich benutze Pandas sehr oft

import pandas as pd
a = [1,2,3,3,3,4,5,6,6,7]
vc = pd.Series(a).value_counts()
vc[vc > 1].index.tolist()

Gibt

[3,6]

Wahrscheinlich ist es nicht sehr effizient, aber es ist auf jeden Fall weniger Code als viele der anderen Antworten, so dass ich dachte, ich würde dazu beitragen

6 Stimmen

Beachten Sie auch, dass Pandas eine eingebaute Duplikate-Funktion enthält pda = pd.Series(a) print list(pda[pda.duplicated()])

8voto

HenryDev Punkte 4355

Wie wäre es, wenn Sie jedes Element in der Liste in einer Schleife durchgehen, indem Sie die Anzahl der Vorkommen prüfen und sie dann zu einer Menge hinzufügen, die dann die Duplikate ausgibt. Hoffentlich hilft das jemandem da draußen.

myList  = [2 ,4 , 6, 8, 4, 6, 12];
newList = set()

for i in myList:
    if myList.count(i) >= 2:
        newList.add(i)

print(list(newList))
## [4 , 6]

7voto

superb rain Punkte 4933

Dies scheint trotz seiner O(n log n)-Komplexität einigermaßen konkurrenzfähig zu sein (siehe Benchmarks unten).

a = sorted(a)
dupes = list(set(a[::2]) & set(a[1::2]))

Beim Sortieren werden die Duplikate nebeneinander gelegt, so dass sie sich sowohl bei einem geraden als auch bei einem ungeraden Index befinden. Eindeutige Werte sind nur an einem geraden oder bei einem ungeraden Index, nicht beides. Die Schnittmenge der Werte mit geradem Index und der Werte mit ungeradem Index sind also die Duplikate.

Benchmark-Ergebnisse: benchmark results

Diese verwendet MSeiferts Benchmark aber nur mit den Lösungen der akzeptierten Antwort (den Georgs), den langsamsten Lösungen, der schnellsten Lösung (ohne it_duplicates da es die Duplikate nicht eindeutig identifiziert), und meine. Sonst wäre es zu voll und die Farben wären zu ähnlich.

Die erste Zeile könnte lauten a.sort() wenn wir die gegebene Liste ändern dürfen, wäre das ein bisschen schneller. Aber der Benchmark verwendet dieselbe Liste mehrmals, so dass eine Änderung den Benchmark beeinträchtigen würde.

Und offenbar set(a[::2]).intersection(a[1::2]) würde nicht einen zweiten Satz erstellen und etwas schneller sein, aber meh, es ist auch ein bisschen länger.

1 Stimmen

Dies ist die beste aller Lösungen, wenn man die Komplexität in Betracht zieht. Danke!

7voto

Nir Alfasi Punkte 51692

Wir können verwenden itertools.groupby um alle Artikel zu finden, die Nachbildungen haben:

from itertools import groupby

myList  = [2, 4, 6, 8, 4, 6, 12]
# when the list is sorted, groupby groups by consecutive elements which are similar
for x, y in groupby(sorted(myList)):
    #  list(y) returns all the occurences of item x
    if len(list(y)) > 1:
        print x  

Die Ausgabe wird sein:

4
6

2 Stimmen

Oder noch prägnanter: dupes = [x for x, y in groupby(sorted(myList)) if len(list(y)) > 1]

7voto

Chetan_Vasudevan Punkte 2354

Ohne Konvertierung in eine Liste und wahrscheinlich am einfachsten wäre etwas wie unten. Dies kann bei einem Vorstellungsgespräch nützlich sein, wenn darum gebeten wird, keine Sets zu verwenden.

a=[1,2,3,3,3]
dup=[]
for each in a:
  if each not in dup:
    dup.append(each)
print(dup)

\======= else, um 2 getrennte Listen mit eindeutigen Werten und doppelten Werten zu erhalten

a=[1,2,3,3,3]
uniques=[]
dups=[]

for each in a:
  if each not in uniques:
    uniques.append(each)
  else:
    dups.append(each)
print("Unique values are below:")
print(uniques)
print("Duplicate values are below:")
print(dups)

3 Stimmen

Dies führt jedoch nicht zu einer Liste von Duplikaten von a (oder der ursprünglichen Liste), sondern zu einer Liste aller eindeutigen Elemente von a (oder der ursprünglichen Liste). Was würde jemand tun, nachdem er die Liste "dup" gebildet hat?

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