假设我有一个包含8个对象的列表,编号为1-8.
这些物体被放入三个盒子中,3个放在一个盒子里,3个放在另一个盒子里,2个放在最后一个盒子里.通过数学,有8C3*5C3 = 560种方法可以做到这一点.我想在那里循环560项.Python有什么方法可以这样做吗?
结果应如下所示:
list=['12','345',678'], ['12','346','578'], ..., etc.
Run Code Online (Sandbox Code Playgroud)
请注意,['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)
Run Code Online (Sandbox Code Playgroud)