我有一些原始二进制文件,由于读取错误,我不确定其中的一些位。
我列出了每个位为 1 或 0 的频率。有些位总是 0 或 1,但有些位很难确定。与下面的示例不同,实际列表有 255 项。只有10位是不确定的,所以我觉得它可以被暴力破解。
[ 0.0, 0.35555555555555557, 1.0, 1.0, 0.4388888888888889, 0.0, 0.35555555555555557, 1.0]
x标记不确定值,f标记固定值。
[ f, x, f, f, x, f, x, f]
如何使用 itertools 获取 x 可能为 0 或 1 的每个组合,输出可能性列表,同时保持已知值固定?
[ 0, 0, 1, 1, 0, 0, 0, 1]
[ 0, 1, 1, 1, 0, 0, 0, 1]
...
[ 0, 1, 1, 1, 1, 0, 1, 1]
最佳答案
您可以创建一个坏索引列表,然后使用 itertools.product
生成这些索引处的所有可能的位组合:
from itertools import product
def possible_patterns(data):
bad_indices = [i for i, bit in enumerate(data) if bit not in [0, 1]]
for replacement in product([0, 1], repeat=len(bad_indices)):
for index, bit in zip(bad_indices, replacement):
data[index] = bit
yield data
data = [ 0.0, 0.35555555555555557, 1.0, 1.0, 0.4388888888888889, 0.0, 0.35555555555555557, 1.0]
for pattern in possible_patterns(data):
print(pattern)
输出:
[0.0, 0, 1.0, 1.0, 0, 0.0, 0, 1.0]
[0.0, 0, 1.0, 1.0, 0, 0.0, 1, 1.0]
[0.0, 0, 1.0, 1.0, 1, 0.0, 0, 1.0]
[0.0, 0, 1.0, 1.0, 1, 0.0, 1, 1.0]
[0.0, 1, 1.0, 1.0, 0, 0.0, 0, 1.0]
[0.0, 1, 1.0, 1.0, 0, 0.0, 1, 1.0]
[0.0, 1, 1.0, 1.0, 1, 0.0, 0, 1.0]
[0.0, 1, 1.0, 1.0, 1, 0.0, 1, 1.0]
关于python - 具有固定值的 Itertools 二进制列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69273272/