HOWTO · Python

Wie man in Python eindeutige Werte aus einer Liste erhält

Der Artikel stellt Methoden vor, um eindeutige Werte aus einer Liste in Python zu erhalten

Auf dieser Seite

Um eindeutige Werte aus einer Python-Liste zu erhalten, verwenden Sie ab Python 3.7 list(dict.fromkeys(values)), wenn die Elemente hashbar sind und die Reihenfolge ihres ersten Auftretens erhalten bleiben soll. Sind die Elemente nicht hashbar, verwenden Sie eine Schleife mit einer Ergebnisliste. Wandeln Sie die Liste nur dann in set(values) um, wenn die Reihenfolge keine Rolle spielt.

Eindeutige Werte in ihrer Reihenfolge mit dict.fromkeys()

dict.fromkeys() erstellt ein Wörterbuch, dessen Schlüssel aus dem Eingabe-Iterable stammen. Wörterbuchschlüssel sind eindeutig, und ab Python 3.7 ist garantiert, dass Wörterbücher die Einfügereihenfolge beibehalten. Werden die Schlüssel anschließend wieder in eine Liste umgewandelt, werden Duplikate entfernt und die erste Position jedes Werts bleibt erhalten. Wie bei Wörterbuchschlüsseln allgemein muss jedes Element hashbar sein.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = list(dict.fromkeys(values))
print(unique_values)

Ausgabe:

['pear', 'apple', 'plum']

Eindeutige Werte in ihrer Reihenfolge mit einer Schleife

Nicht hashbare Werte, etwa verschachtelte Listen, können weder als Wörterbuchschlüssel noch als Elemente einer Menge verwendet werden. Eine explizite Schleife kann stattdessen jeden Wert mit den bereits gesammelten Werten vergleichen. Sie behält das erste Auftreten bei und eignet sich für Listen mit Werten, deren Gleichheit sinnvoll verglichen werden kann.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

values = [[1, 2], [3, 4], [1, 2]]
unique_values = []
for value in values:
    if value not in unique_values:
        unique_values.append(value)
print(unique_values)

Jede Prüfung mit value not in unique_values durchsucht die Ergebnisliste. Mit zunehmender Zahl unterschiedlicher Elemente können die wiederholten Vergleiche diesen Ansatz langsamer machen als Methoden mit Hashing. Verwenden Sie ihn daher, wenn die Unterstützung nicht hashbarer Elemente wichtiger ist als die Geschwindigkeit.

Eindeutige Werte mit set(), wenn die Reihenfolge keine Rolle spielt

Bei hashbaren Elementen entfernt set(values) Duplikate auf knappe Weise. Eine Menge behält die Reihenfolge der Eingabeliste nicht bei. Verlassen Sie sich daher beim Umwandeln in eine Liste nicht auf eine bestimmte Reihenfolge. Auch die Elemente einer Menge müssen hashbar sein. Verwenden Sie diese Möglichkeit, wenn die Reihenfolge unerheblich ist, zum Beispiel beim Prüfen der Mitgliedschaft oder beim Vergleichen der enthaltenen Werte.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = set(values)
print(unique_values)

Die angezeigte Reihenfolge der Menge kann variieren. Das Ergebnis enthält die unterschiedlichen Werte, aber für ihre Ausgabereihenfolge gibt es keine Garantie.

Die passende Methode für Ihre Liste auswählen

Wählen Sie dict.fromkeys(), wenn Sie eine knappe Ergebnisliste möchten, die das erste Auftreten jedes hashbaren Werts beibehält. Verwenden Sie die explizite Schleife, wenn Werte möglicherweise nicht hashbar sind, etwa Listen, und die Reihenfolge ihres ersten Auftretens erhalten bleiben soll. Wählen Sie set(), wenn die Werte hashbar sind und ihre Reihenfolge keine Bedeutung hat.

Bei hashbaren Eingaben sind Wörterbuch- und Mengenmitgliedschaft im Durchschnitt üblicherweise effizient. Die Schleife durchsucht dagegen wiederholt die wachsende Ergebnisliste. Diese Methoden bestimmen Duplikate anhand von Pythons Gleichheits- und Hashing-Verhalten: Gleiche Werte wie 1 und True gelten als gleich und werden zu einem Eintrag zusammengefasst. Benötigt Ihre Anwendung eine andere Definition von Eindeutigkeit, normalisieren Sie zuerst jedes Element oder leiten Sie einen Schlüssel dafür ab und entfernen Sie anschließend anhand dieses Schlüssels die Duplikate.