Ich bin auf den folgenden Code gestoßen, um Duplikate aus einer Liste zu entfernen:
seen = set(); print [i for i in list if i not in seen and not seen.add(i)]
Ich konnte nicht verstehen, was genau "und nicht seen.add(i)" dieser Teil des Codes tut alsHilfe (einstellen.hinzufügen)gibt folgende Erklärung:
add(...)
Add an element to a set.
This has no effect if the element is already present.
Ich freue mich auf Ihre Hilfe zum Verständnis
Antwort1
Die Listenableitung iteriert über die Werte der Original-/Eingabeliste. Wir möchten, dass ein Wert genau dann zur neuen/Ausgabeliste hinzugefügt wird, wenn er noch nicht gesehen wurde, daher der bedingte Ausdruck if i not in seen
. Wenn ein neuer Wert zur neuen/Ausgabeliste hinzugefügt wird, seen
muss der Satz aktualisiert werden, daher der seen.add(i)
Funktionsaufruf. Die set.add()
Methode gibt jedoch zurück None
, was zu ausgewertet wird False
. Daher not
wird der Operator hinzugefügt, sodass not seen.add(i)
immer zurückgegeben wird True
.