生成 Python3 中给定单词的具有不同前缀的 n 位的所有可能组合

Generate all the possible combinations of n bits with different prefix of a given word in Python3

我遇到了以下问题。给定一个词(二进制词)我想生成所有长度为 n 的组合,并且给定的词不能是任何组合的前缀。

例如,使用 n = 3 并且单词是 00 我想生成:

010
011
100
101
110
111

有什么pythonic的方法可以做到这一点吗?

编辑:抱歉,我正在尝试修改此标准伪代码

combinations:
if depth = 0 return result
for i in start..size
    out+=combinations(depth-1, i+1, result)
return out

我不知道如何添加不以给定单词开头的限制。 "pythonic" 我的意思是像理解列表,或者一个漂亮的单行 :D

您可以在 one-liner 中完成所有工作,但需要进行一些设置。这利用了这样一个事实,即您基本上想要 02**n 范围内的所有二进制数,除非它们最左边的位表示特定的二进制数。请注意,通常您会将大部分数字保留在范围内(除 1/2**len(word) 之外的所有数字),因此仅生成所有数字然后过滤掉不需要的数字是相当有效的。

word = '00'
word_int = int(word, base=2)
m = len(word)
n = 3
results = ['{0:b}'.format(num).zfill(n) for num in range(2**n) if num >> (n-m) != word_int]
print('\n'.join(results))
# 010
# 011
# 100
# 101
# 110
# 111

您可以删除一些设置,但 one-liner 变得更难阅读:

word = '00'
n = 3
[
    num 
    for num in ('{0:b}'.format(p).zfill(n) for p in range(2**n)) 
    if not num.startswith(word)
]

或者您可以使用 itertools.product

word = '00'
n = 3
[
    num 
    for num in (''.join(p) for p in itertools.product('01', repeat=n)) 
    if not num.startswith(word)
]