W3docs

Duplikate in Python entfernen: Ein umfassender Leitfaden

Fünf praktische Methoden zum Entfernen von Duplikaten aus einer Python-Liste: set(), dict.fromkeys(), for-Schleife, List Comprehension und Counter.

Doppelte Werte in einer Python-Liste kommen häufig vor, wenn Benutzereingaben gesammelt, Datensätze zusammengeführt oder Dateien gelesen werden. Dieser Leitfaden stellt fünf praktische Techniken zum Entfernen von Duplikaten vor — jede mit einem anderen Kompromiss zwischen Geschwindigkeit, Reihenfolgeerhaltung und Lesbarkeit.

MethodeErhält die ReihenfolgeFunktioniert mit nicht-hashbaren ElementenLesbar
set()NeinNeinJa
dict.fromkeys()Ja (Python 3.7+)NeinJa
for-Schleife mit Seen-SetJaNeinMittel
List ComprehensionJaNeinMittel
Counter (Duplikate finden)JaNeinJa

set() zum Entfernen von Duplikaten verwenden

Eine Liste in ein Set umzuwandeln ist die schnellste und knappste Methode zur Deduplizierung. Ein Set speichert nur eindeutige, hashbare Werte, sodass Duplikate automatisch verworfen werden.

python— editable, runs on the server

Ausgabe (Reihenfolge kann variieren):

[1, 2, 3, 4, 5]

Wann zu verwenden: Die Reihenfolge spielt keine Rolle und die Liste enthält nur hashbare Elemente (Zahlen, Strings, Tupel).

Achtung: Sets sind ungeordnet. Auch wenn kleine Integer-Sets häufig in sortierter Reihenfolge ausgegeben werden, ist darauf kein Verlass. Wenn die Reihenfolge wichtig ist, verwenden Sie eine der folgenden Methoden.

dict.fromkeys() zur Erhaltung der Reihenfolge verwenden

dict.fromkeys() erstellt ein Dictionary, dessen Schlüssel die Listenelemente sind. Da Dictionary-Schlüssel eindeutig sind und seit Python 3.7 in Einfügereihenfolge gespeichert werden, entfernt diese Methode Duplikate und behält gleichzeitig die ursprüngliche Reihenfolge bei.

python— editable, runs on the server

Ausgabe:

[1, 2, 3, 4, 5]

Dies ist der idiomatische Einzeiler für reihenfolgeerhaltende Deduplizierung in modernem Python (3.7+). Er ist auch etwas schneller als eine explizite Schleife, da die Dictionary-Operationen in C ausgeführt werden.

for-Schleife mit Seen-Set verwenden

Wenn volle Kontrolle benötigt wird — zum Beispiel um übersprungene Duplikate zu protokollieren oder benutzerdefinierte Gleichheitslogik anzuwenden — ist eine explizite Schleife der klarste Ansatz.

def remove_duplicates(lst):
    seen = set()
    result = []
    for item in lst:
        if item not in seen:
            seen.add(item)
            result.append(item)
    return result

my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(remove_duplicates(my_list))

Ausgabe:

[3, 1, 4, 5, 9, 2, 6]

Dies erhält die Einfügereihenfolge und läuft in O(n)-Zeit — die in-Prüfung auf einem Set ist O(1). Im Vergleich dazu ist if item not in result O(n) pro Element und macht die gesamte Funktion O(n²).

List Comprehension verwenden

Dasselbe Seen-Set-Muster lässt sich als Einzeiler mit einer List Comprehension schreiben. Der Trick besteht darin, dass set.add() immer None zurückgibt (falsy), sodass not (x in seen or seen.add(x)) nur beim ersten Auftreten jedes Wertes True ist.

my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
seen = set()
unique = [x for x in my_list if not (x in seen or seen.add(x))]
print(unique)

Ausgabe:

[3, 1, 4, 5, 9, 2, 6]

Das ist kompakt, beruht aber auf einem Nebeneffekt innerhalb der Comprehension, was für Leser überraschend sein kann. Die explizite for-Schleife oben wird im Team-Code häufig bevorzugt.

Counter zum Auffinden doppelter Werte verwenden

Manchmal muss man wissen, welche Werte mehr als einmal vorkommen, anstatt sie einfach zu entfernen. collections.Counter zählt Vorkommen und macht dies einfach.

from collections import Counter

my_list = [1, 2, 2, 3, 4, 4, 5, 5, 5]
counts = Counter(my_list)
print(counts)

duplicates = [item for item, count in counts.items() if count > 1]
print("Duplicated values:", duplicates)

Ausgabe:

Counter({5: 3, 2: 2, 4: 2, 1: 1, 3: 1})
Duplicated values: [2, 4, 5]

Um eine deduplizierte Liste aus einem Counter zu erhalten, verwenden Sie list(counts.keys()) — Schlüssel behalten in Python 3.7+ die Einfügereihenfolge bei.

Duplikate aus einem DataFrame mit Pandas entfernen

Bei der Arbeit mit tabellarischen Daten bietet die Pandas-Bibliothek DataFrame.drop_duplicates(). Diese Methode unterstützt eine detaillierte Steuerung über ihre Parameter.

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'],
    'score': [90, 85, 90, 78, 85],
}
df = pd.DataFrame(data)
df_unique = df.drop_duplicates()
print(df_unique)

Ausgabe:

      name  score
0    Alice     90
1      Bob     85
3  Charlie     78

Wichtige Parameter:

  • subset — ein Spaltenname oder eine Liste von Spaltennamen, die berücksichtigt werden sollen. Duplikate werden nur innerhalb dieser Spalten erkannt.
  • keep'first' (Standard) behält das erste Vorkommen; 'last' behält das letzte; False löscht alle Zeilen, die Duplikate aufweisen.
  • inplace=True — ändert den DataFrame direkt, anstatt einen neuen zurückzugeben.
# Keep only the last occurrence of each name
df_last = df.drop_duplicates(subset='name', keep='last')
print(df_last)

Ausgabe:

      name  score
2    Alice     90
3  Charlie     78
4      Bob     85

Die richtige Methode wählen

  • Schnellste Methode, Reihenfolge unwichtigset().
  • Reihenfolge wichtig, Einzeilerdict.fromkeys().
  • Benutzerdefinierte Logik oder Protokollierung — explizite for-Schleife mit einem Seen-Set.
  • Tabellarische Datenpandas.DataFrame.drop_duplicates().
  • Ermitteln, welche Werte doppelt vorkommencollections.Counter.

Weitere Informationen zur Arbeit mit Listen finden Sie im Kapitel Python Lists und in der vollständigen Referenz der Listen-Methoden. Mehr über Sets und ihre Operationen erfahren Sie unter Python Sets und Set Methods.

Was this page helpful?