[0.0, 1.0, 2.0, 3.0, 4.0]Alle Möglichkeiten der Partitionierung eine Liste in zwei nicht-leeren Listen
Ich habe 5 Zahlen und zwei Gruppen, links und rechts. Jede Nummer hat zwei Möglichkeiten - sie kann nach links oder rechts gehen. Ich brauche eine Liste, die alle Partitionierung der Liste [0,1,2,3,4] in zwei nicht leere Teile enthält. Zum Beispiel: [([0], [1,2,3,4]), ([0,1], [2,3,4]), ...,]
Beachten Sie, dass es a insgesamt (2^5 -2)/2 Partitionierung - Reihenfolge spielt keine Rolle und ich möchte keine Wiederholungen. Bedeutung I so etwas wie dieses nicht wollen tun (wenn meine Liste war [1,2,3,4]):
[] [1, 2, 3, 4]
[1] [2, 3, 4]
[2] [1, 3, 4]
[1, 2] [3, 4]
[3] [1, 2, 4]
[1, 3] [2, 4]
[2, 3] [1, 4]
[1, 2, 3] [4]
[4] [1, 2, 3]
[1, 4] [2, 3]
[2, 4] [1, 3]
[1, 2, 4] [3]
[3, 4] [1, 2]
[1, 3, 4] [2]
[2, 3, 4] [1]
[1, 2, 3, 4] []
ich in all den itertools Funktionen und keine geschaut haben scheinen zu arbeiten.
Edit: für Liste [i für i in range (16)], die 16 Elemente, Wenn ich den folgenden Code, das ist, was ich sehe:
n = len(l)//2 + 1
>>> xs = list(chain(*[combinations(l, i) for i in range(1, n)]))
>>> pairs = [(list(x), list(set(l) - set(x))) for x in xs]
>>> print len(pairs)
39202
>>> (2**16-2)/2
32767
In der Tat, Es funktioniert auch nicht für eine Liste mit 6 Elementen. Ich sehe nicht warum ...
Das Problem tritt bei allen geraden Längenlisten auf. Zum Beispiel, wenn ich eine Länge 2 Liste versuchen, erhalte ich:
[([0,0], [1,0]), ([1,0], [0,0])]
Warten, das ist, was ich habe: [(0,), (1,), (2,), (3 ,), (4), (0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]. Für jede Partition brauche ich ALLE Elemente in Liste L, die zu einer der beiden Listen, links oder rechts, gruppiert werden sollen. Und ich möchte alle solche Partitionierungen. – Jobs
Wie: [(links, rechts), (links, rechts), (links, rechts) ...... [15 solche Aufteilung der Elemente in zwei nichtleere Gruppen] ..] – Jobs
Bearbeitet. Ich dachte, du könntest den Rest selbst herausfinden ...;) – wim