2016-10-27 5 views
0

Ich benutze Python (2.7.2) und ich brauche alle Permutationen ohne Wiederholung aus einer Liste. Genauer gesagt, gibtPython Itertools Permutationen mit Doppelelementen

for i in itertools.permutations([1,2,3]): print i 

richtig

(1, 2, 3) 
(1, 3, 2) 
(2, 1, 3) 
(2, 3, 1) 
(3, 1, 2) 
(3, 2, 1) 

Aber jetzt (oder, ich suche nach etwas, das folgende

for i in myfunction([1,2,2]): print i 
(1,2,2) 
(2,2,1) 
(2,1,2) 

täte Während itertools zweimal diese Liste geben würde ([ 1,1,1]) als Eingabe wird es nur sechsmal wiederholt). Dies ist im Grunde etwas zwischen itertools.permutations und iertools.combinations. Ich habe versucht, mit Sets zu arbeiten, aber alle Lösungen, die ich ausprobierte, haben immer neue Probleme verursacht und nie die gewünschte Ausgabe erreicht.

+1

Können Sie nicht filtern, dass nur das Ergebnis durch einen 'Set'? 'für i im Satz (itertools.permutations ([1,2,2])): print i' –

+0

Works. Danke, irgendwie ist es am Anfang nicht gelungen, dorthin zu gelangen und endete in komplizierten Lösungen. – Eulenfuchswiesel

+1

Es gibt eine effiziente Möglichkeit, das in [dieser alten Antwort von mir] zu tun (http://stackoverflow.com/a/31678111/4014959) –

Antwort

1

Es sieht aus wie Sie das Set wollen.

s = [] 
for i in itertools.permutations([1,2,2]): 
    s.append(i) 
print(set(s)) 

Welche gibt:

{(1, 2, 2), (2, 2, 1), (2, 1, 2)} 

Alternativ ohne die Objekte zu einer Variablen zu speichern:

for i in set(itertools.permutations([1,2,2])): 
    print(i) 
+1

Gibt es einen Grund, warum Sie nicht einfach direkt in das Set einfügen? Was ist der Zweck der Liste? –

+0

Ich bearbeitete meine Antwort, um die direkte Methode einzuschließen, aber der Grund war, zu zeigen, wie man ein Objekt mit der gewünschten Information hält. – Andy

+0

Warum müssten Sie die Objekte speichern? –