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

23voto

wellplayed Punkte 854

Verwendung von Pandas:

>>> import pandas as pd
>>> a = [1, 2, 1, 3, 3, 3, 0]
>>> pd.Series(a)[pd.Series(a).duplicated()].values
array([1, 3, 3])

14voto

Nikhil Prabhu Punkte 1022

Hier ist eine klare und übersichtliche Lösung -

for x in set(li):
    li.remove(x)

li = list(set(li))

0 Stimmen

Die ursprüngliche Liste ist jedoch verloren gegangen. Dies kann behoben werden, indem der Inhalt in eine andere Liste kopiert wird - temp = li[:]

6 Stimmen

Das ist bei großen Listen eine ziemlich unangenehme Aufgabe - das Entfernen von Elementen aus Listen ist ziemlich teuer!

0 Stimmen

Sie entfernen also im Grunde alles aus der Liste, was kein Duplikat ist, und am Ende bleiben nur noch die Duplikate übrig.

14voto

yǝsʞǝla Punkte 16057

Python 3.8 Einzeiler, wenn Sie nicht Ihren eigenen Algorithmus schreiben oder Bibliotheken verwenden wollen:

l = [1,2,3,2,1,5,6,5,5,5]

res = [(x, count) for x, g in groupby(sorted(l)) if (count := len(list(g))) > 1]

print(res)

Druckt Artikel und Anzahl:

[(1, 2), (2, 2), (5, 4)]

groupby nimmt eine Gruppierungsfunktion, so dass Sie Ihre Gruppierungen auf verschiedene Weise definieren und zusätzliche Tuple Felder nach Bedarf.

1 Stimmen

Faulheit hat nichts mit Geschwindigkeit (im Sinne von Durchsatz) zu tun, insbesondere in diesem Fall, wo res ist eine Liste, die eifrig ist.

6 Stimmen

Das ist großartig, aber es sollte erwähnt werden, dass Sie Folgendes benötigen from itertools import groupby für diese

11voto

Anand Chitipothu Punkte 3814

Ich denke, die effektivste Methode, um Duplikate in einer Liste zu finden, ist:

from collections import Counter

def duplicates(values):
    dups = Counter(values) - Counter(set(values))
    return list(dups.keys())

print(duplicates([1,2,3,6,5,2]))

Sie verwendet Counter einmal für alle Elemente und dann für alle eindeutigen Elemente. Durch Subtraktion der ersten von der zweiten werden nur die Duplikate ausgelassen.

11voto

Edward Punkte 143

Collections.Counter ist neu in python 2.7:

Python 2.5.4 (r254:67916, May 31 2010, 15:03:39) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
a = [1,2,3,2,1,5,6,5,5,5]
import collections
print [x for x, y in collections.Counter(a).items() if y > 1]
Type "help", "copyright", "credits" or "license" for more information.
  File "", line 1, in 
AttributeError: 'module' object has no attribute 'Counter'
>>> 

In einer früheren Version können Sie stattdessen ein herkömmliches Diktat verwenden:

a = [1,2,3,2,1,5,6,5,5,5]
d = {}
for elem in a:
    if elem in d:
        d[elem] += 1
    else:
        d[elem] = 1

print [x for x, y in d.items() if y > 1]

0 Stimmen

Beachten Sie, dass Sie in Python 3 Klammern für die Druckanweisung benötigen

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