Python-Kombinationen ohne Wiederholungen
Ich habe eine Liste von zahlen, und ich möchte, um Kombinationen daraus. Wenn ich die Liste:
t = [2,2,2,2,4]
c = list(itertools.combinations(t, 4))
Ist das Ergebnis:
(2, 2, 2, 2)
(2, 2, 2, 4)
(2, 2, 2, 4)
(2, 2, 2, 4)
(2, 2, 2, 4)
aber ich will:
(2, 2, 2, 2)
(2, 2, 2, 4)
Ist es möglich, Duplikate zu beseitigen, außer neue Liste und gehen durch die erste Liste?
- Verwenden Sie eine
set
?...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Donkey Kong-points gesetzt werden, erhalten Sie die eindeutige Werte in einer Liste durch die Umwandlung der Liste in ein set :
Und das Ergebnis wird sein:
Wenn Sie möchten, es zu benutzen, wie eine Liste, können Sie wandeln es wieder dadurch :
Alternative und mehr saubere,umfassende Weg wird sein :
set(itertools.combinations(t, 4))
Ich weiß, das ist spät, aber ich möchte einen Punkt hinzufügen.
set(itertools.combinations(t, 4))
würde das tun, einen guten job für die meisten Fällen, aber es immer noch durchläuft alle sich wiederholenden Kombinationen intern und so kann man es rechnerisch schwer. Dies ist insbesondere der Fall, wenn es nicht viele tatsächliche einzigartige Kombinationen.Diese eine iteriert nur einzigartige Kombinationen:
Verwendung:
Beachten Sie, dass
itertools.combinations()
ist implementiert in C, was bedeutet, es ist viel schneller als mein python-Skript für die meisten Fälle. Dieser code funktioniert besser alsset(itertools.combinations())
Methode nur, wenn es wesentlich MEHR sich wiederholende Kombinationen als einzigartige Kombinationen.Technisch, was Sie erhalten, sind keine echten Duplikate, es ist einfach wie
itertools.Kombinationen
funktioniert, wenn Sie Lesen, die Beschreibung auf der verlinkten Seite:DEMO:
So, wie gepostet auf der vorherigen Antwort,
set()
wird Sie mit einer einzigartigen Werte, die Sie möchten: