用中间数组的M个长度排列N个列表的所有可能

时间:2019-06-24 13:49:55

标签: python list random size permutation

我正在尝试雕刻一些文件。为了做到这一点,我想对所有可能性进行排列。有3个可能的开始,40个可能的中间区块和3个可能的结束。

问题是我们不知道中间块有多长时间。它可以是1个块长,但也可以是40个块长。我们唯一可以确定的是,这些块是连续出现的,因为它是我要恢复的PNG。

我已经尝试过自己编写带有很多for循环的代码,到目前为止还没有成功。 我确实尝试了以下代码。

s= [[headersList],[idatList],[iendList]]
    print(list(itertools.product(*s)))

我希望输出是类似的

[1, [1], 1]
[1, [1,2] , 1]
[1, [1,2,3], 1]
...
[2, [1] ,1]
[2, [1, 2], 1]

以此类推。 唯一的条件是开始和结束块必须位于数组的相应开始和结束位置。中间区块的大小必须为1到最大40(连续的顺序)。

1 个答案:

答案 0 :(得分:1)

您应该在这里使用产品:

from itertools import product

head   = range(1,4)
tail   = range(1,4)
middle = range(1,41)
combos = [(h,list(range(1,m+1)),t) for t,h,m in product(tail,head,middle)]


print(combos)
# [(1, [1], 1), (1, [1, 2], 1), (1, [1, 2, 3], 1), 
#  (1, [1, 2, 3, 4], 1), (1, [1, 2, 3, 4, 5], 1), ...