假设我有元组(3,2,1,4)。我想找到所有可能的组合,包括从范围(5)中获取3个元素,从范围(5)中获取2个元素,从范围(5)中获取1个元素,然后从范围(5)中获取4个元素。每个单独组合之间的顺序很重要,所以我不能只从范围(5)或类似的东西中取出长度为9的组合。
如果我上面写的内容不清楚,那么样本组合可能是
[0, 1, 4, 2, 3, 2, 0, 1, 2, 3].
我在上面的列表中引入了间距,只是为了清楚它们之间的顺序很重要。
我想用itertools实现这个应该很简单,但我不知道怎么做。
答案 0 :(得分:2)
假设您正在寻找combinations而不是permutations,则以下内容应该符合您的要求。
from itertools import chain, combinations, product
lengths = (3, 2, 1, 4)
for L in product(*(combinations(range(5), length) for length in lengths)):
print(list(chain.from_iterable(L)))
答案 1 :(得分:0)
如果订单对您很重要,那么这就是您想要的:
>>> l1=list(combinations(range(5), 1))
>>> l2=list(combinations(range(5), 2))
>>> l3=list(combinations(range(5), 3))
>>> l4=list(combinations(range(5), 4))
>>> tl=[l3,l2,l1,l4]
>>> list(product(*tl))
[((0, 1, 2), (0, 1), (0,), (0, 1, 2, 3)), ((0, 1, 2), (0, 1), (0,), (0, 1, 2, 4)), ((0, 1, 2), (0, 1), (0,), (0, 1, 3, 4)), ((0, 1, 2), (0, 1), (0,), (0, 2, 3, 4)), ((0, 1, 2), (0, 1), (0,), (1, 2, 3, 4)), ((0, 1, 2), (0, 1), (1,), (0, 1, 2, 3)), ((0, 1, 2), (0, 1), (1,), (0, 1, 2, 4)), ((0, 1, 2), (0, 1), (1,), (0, 1, 3, 4)), ((0, 1, 2), (0, 1), (1,), (0, 2, 3, 4)), ((0, 1, 2), (0, 1), (1,), (1, 2, 3, 4)), ((0, 1, 2), (0, 1), (2,), (0, 1, 2, 3)), ((0, 1, 2), (0, 1), (2,), (0, 1, 2, 4)), ((0, 1, 2), (0, 1), (2,), (0, 1, 3, 4)), ((0, 1, 2), (0, 1), (2,), (0, 2, 3, 4)), ((0, 1, 2), (0, 1), (2,), (1, 2, 3, 4)), ((0, 1, 2), (0, 1), (3,), (0, 1, 2, 3)), ((0, 1, 2), (0, 1), (3,), (0, 1, 2, 4)), ((0, 1, 2), (0, 1), (3,), (0, 1, 3, 4)), ((0, 1, 2), (0, 1), (3,), (0, 2, 3, 4)), ((0, 1, 2), (0, 1), (3,), (1, 2, 3, 4)), ((0, 1, 2), (0, 1), (4,), (0, 1, 2, 3)), ((0, 1, 2), (0, 1), (4,), (0, 1, 2, 4)), ((0, 1, 2), (0, 1), (4,), (0, 1, 3, 4)), ((0, 1, 2), (0, 1), (4,), (0, 2, 3, 4)), ((0, 1, 2), (0, 1), (4,), (1, 2, 3, 4)), ((0, 1, 2)