1 から 8 までの番号が付けられた 8 つのオブジェクトのリストがあるとします。
オブジェクトは 3 つのボックスに入れられます。1 つのボックスに 3 つ、別のボックスに 3 つ、最後のボックスに 2 つです。数学的には、これを行う方法は 8C3*5C3=560 通りあります。そこに560個のアイテムをループしたい。Pythonでそうする方法はありますか?
結果は次のようになります。
list=['12','345',678'], ['12','346','578'], ..., etc.
この目的では、 と は同じと見なされる['12','345','678']
ことに注意してください。['12','354',876']
このリストを for ループにしたい。Pythonでそうする方法はありますか?
ここに私が得た解決策がありますが、それは醜いようです。
import itertools
for c1,c2 in itertools.combinations(range(8),2):
l2=list(range(8))
l2.pop(c2)
l2.pop(c1)
for c3,c4,c5 in itertools.combinations(l2,3):
l3=l2[:]
l3.remove(c5)
l3.remove(c4)
l3.remove(c3)
c6,c7,c8=l3
print(c1,c2,c3,c4,c5,c6,c7,c8)