[0.0,1.0,2.0,3.0,4.0]リストを2つの空でないリストに分割するすべての方法
私は5つの数字と2つのグループを左右に持っています。 各番号には2つの選択肢があります。左右に移動できます。 リスト[0,1,2,3,4]のすべてのパーティショニングを2つの空でない部分に含むリストが必要です。たとえば、[([0]、[1,2,3,4])、([0,1]、[2,3,4])、...]
(2^5 -2)/ 2パーティショニングの合計は問題ではなく、繰り返しはしたくありません。 (私のリストは、[1,2,3,4]だった場合)、私はこのような何かを望んでいん意味:私はitertools機能となしのすべてに見てきた
[] [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] []
が動作するように見えます。
編集:リストのための [範囲のiについてI(16)]私は次のことを行う場合は、16個の要素を持っている、これは私が見たものである。
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
実際には、 6つの要素を持つリストの場合にも機能しません。理由がわかりません...
この問題は、すべての偶数長リストで発生します。私は長さ2のリストをしようとすると、例えば、Iを得る:
[([0.0]、[1.0])、([1.0]、[0.0])]
待ち、これは私が得たものである:[(0)、(1)、(2)、(3 (1,0)、(0,3)、(1,2)、(1,3)、(1,4)、(1,1)、 (2,3)、(2,4)、(3,4)]となる。各パーティションについて、リストL内のすべての要素を左または右の2つのリストのいずれかにグループ化する必要があります。そして私はそのようなすべての分割を望んでいます。 – Jobs
Like:[(左、右)、(左、右)、(左、右)...... [15個の要素を空でない2つのグループに分割する] ..] – Jobs
編集されました。私はあなたが残りの部分を自分で把握できると思っていた...;) – wim