Ich habe eine Liste in Python, die ich als Teil des Programms erzeuge. Ich habe eine starke Annahme, dass diese alle verschieden sind, und ich überprüfe das mit einer Behauptung.
So mache ich es jetzt:
Wenn es zwei Elemente gibt:
%Vor%Wenn es drei gibt:
%Vor%Und wenn ich das jemals mit vier Elementen machen muss, werde ich verrückt.
Gibt es eine bessere Möglichkeit sicherzustellen, dass alle Elemente der Liste eindeutig sind?
Die beliebtesten Antworten sind O (N) (gut! -), aber wie @Paul und @Mark darauf hinweisen, müssen die Elemente der Liste hashbar sein. Sowohl @Paul als auch @ Marks vorgeschlagene Ansätze für nicht hashbare Elemente sind allgemein, aber nehmen O (N-Quadrat) - d. H. Eine Menge.
Wenn die Einträge Ihrer Liste nicht hashbar sind, aber sind vergleichbar, können Sie es besser machen ... hier ist ein Ansatz, der immer so schnell wie möglich funktioniert, angesichts der Art der Listenelemente.
%Vor%Dies ist O (N) wo möglich (alle Artikel sind waschbar), O (N log N) als der häufigste Fallback (einige Artikel nicht hashbar, aber alle vergleichbar), O (N squared) wo unvermeidlich (einige Artikel nicht hashbar), zB dicts, und einige nicht vergleichbare, zB komplexe Zahlen).
Die Inspiration für diesen Code stammt von einem alten Rezept des großartigen Tim Peters, das sich dadurch unterschied, dass er tatsächlich eine Liste einzigartiger Artikel produzierte (und auch so weit her war, dass set
nicht da war - es musste einen% verwenden co_de% ...! -), aber grundsätzlich mit identischen Problemen konfrontiert.
Hoffentlich sind alle Elemente in Ihrer Sequenz unveränderlich - wenn nicht, können Sie set
nicht in der Sequenz aufrufen.
Wenn Sie änderbare Elemente haben, können Sie die Elemente nicht hashen und Sie müssen die Liste ziemlich oft überprüfen:
%Vor%
Beim Erstellen der Liste können Sie prüfen, ob der Wert bereits vorhanden ist, z. B .:
%Vor%Der Vorteil ist, dass die kollidierende Variable gemeldet wird.