Wie finde ich die Duplikate in einer Liste mit ganzen Zahlen und erstelle eine weitere Liste mit den Duplikaten?
Beachten Sie auch, dass Pandas eine eingebaute Duplikate-Funktion enthält pda = pd.Series(a)
print list(pda[pda.duplicated()])
Wie finde ich die Duplikate in einer Liste mit ganzen Zahlen und erstelle eine weitere Liste mit den Duplikaten?
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
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]
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.
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.
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
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)
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.
2 Stimmen
Mögliche Duplikate von Wie entfernt man Duplikate aus einer Liste in Python unter Beibehaltung der Reihenfolge?
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