【发布时间】:2019-06-24 13:49:55
【问题描述】:
我正在尝试雕刻一些文件。为了做到这一点,我想置换所有的可能性。有 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,2,7 是否有效吗?我想这是无效的。它是否应该始终以 1 开头? 3,4,5 是有效的中间块吗?然后您只有 40 个中间组合,并且您尝试生成总共 3x40x3 = 360 个排列。
-
@GreenCloakGuy 这是一个十六进制数据文件,所以在这里发布它很长。它应该是一个 PNG 块、N 个 idat 块和一个 iend 块。
-
@EmmetB 第一个和最后一个数字应该在 1 到 3 之间。因为有 3 个起始块和 3 个结束块。中间块是N长,最多40个。我知道的是中间块中的数字是连续出现的。
标签: python list random size permutation