2017-10-28 2 views
-2
input set [1,2,3] 

mit itertools.combinations wir mit diesem Programm folgende AusgabePython - alle Teilmengen einer Menge

>>> a = [] 
>>> x = [1,2,3] 

>>> for t in range(1, len(x)+1): 
...  k = itertools.combinations(x,t) 
...  a.append([y for y in k]) 

i Ausgang folgt erhalten

[ [(1), (2), (3)], [(1, 2), (1, 3), (2, 3)], [(1, 2, 3)] ] 

aber ich bin für diesen Ausgang suchen:

[ [(1), (1, 2), (1, 2, 3), (1, 3)], [(2), (2, 3)], [(3)] ] 

keine Ahnung wer zu bekommen seine Ausgabe.

+0

Haben Sie wirklich die beiden Ebenen der Liste Verschachtelung wollen? Oder interessiert dich nur die Reihenfolge der Tupel? –

+0

Reihenfolge der Tupel – codenut

+0

Warum diese bestimmte Reihenfolge? –

Antwort

3

Hier ist eine Lösung, die eine abgeflachte Liste erzeugt der Kombination Tupel (wie Sie in Ihrem Kommentar war akzeptabel angegeben), in der gewünschten Reihenfolge:

:

def combos(x): 
    if len(x) == 0: 
     return [] 
    cs = combos(x[1:]) 
    return [(x[0],)] + [(x[0],) + c for c in cs] + cs 

Wenn Sie es als aufrufen

print(combos([1, 2, 3])) 

Das Ergebnis ist:

[(1,), (1, 2), (1, 2, 3), (1, 3), (2,), (2, 3), (3,)] 

Auch dies ist eine abgeflachte Liste, aber die Tupel sind in der Reihenfolge, die Sie angefordert haben.

1

könnten Sie nur flach und sortieren sie:

sorted(sum(a, [])) 

Demo:

>>> a = [[(1,), (2,), (3,)], [(1, 2), (1, 3), (2, 3)], [(1, 2, 3)]] 
>>> sorted(sum(a, [])) 
[(1,), (1, 2), (1, 2, 3), (1, 3), (2,), (2, 3), (3,)] 
+0

schlau! aber es wird nicht funktionieren, wenn ich das Array nicht so sortieren kann, wie ich ursprünglich ein Array von String (Nahrungsmittelnamen) habe, und ich versuche, eine Kombination zu bilden, aber ich kann es nicht sortieren, weil Kombinationen in der Reihenfolge gebildet werden müssen Eingabe wird vom Benutzer gegeben. Aber nach meiner obigen Frage ist das auch richtig. Vielen Dank. – codenut

Verwandte Themen