Gibts in Python dafür n schöne Funktion?

2 Antworten

Du könntest mit dict.fromkeys(...) ein Dictionary mit den entsprechenden Listeneinträgen als Keys erstellen. Da kein Key in einem Dictionary doppelt vorkommen darf, werden dabei doppelte Einträge entfernt. Danach kann man das Dictionary wieder zu einer Liste casten. [Die Reihenfolge der Listeneinträge sollte dabei erhalten bleiben. Zumindest ab Python 3.7 sind Dictionarys geordnet.]

Beispiel:

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
print(mylist)

Das Beispiel habe ich einfach von
https://www.w3schools.com/python/python_howto_remove_duplicates.asp
kopiert.


mihisu  26.12.2022, 18:16

Das wäre zwar eine übliche Methode, doppelte Listeneinträge zu entfernen. ABER... Das funktioniert so nicht, wenn es Listenelemente gibt, die nicht hashable sind.

Beispielsweise würde...

mylist = [[1, 2], [3, 4], [1, 2], [1, 3]]
mylist = list(dict.fromkeys(mylist))
print(mylist)

... eine Fehlermeldung liefern:

TypeError: unhashable type: 'list'

In diesem Fall könnte man beispielsweise sowas machen:

mylist = [[1, 2], [3, 4], [1, 2], [1, 3]]
mylist = [el for n, el in enumerate(mylist) if el not in mylist[:n]]
print(mylist)
0
Von Experte jo135 bestätigt

Der einfachste Weg wäre hier, die Liste zuerst in ein Set umzuwandeln (sets können ein Element maximal ein Mal enthalten), und dann das Set wieder zu einer Liste umzuwandeln.

Heißt deine ursprüngliche Liste zum Beispiel werte, dann sieht das so aus:

list(set(werte))

Du musst aber beachten, dass das nicht unbedingt der effizienteste weg ist, und dass die Reihenfolge der Einträge sich verändern kann.