给定一个起始字符串的Python蛮力组合

2024-04-25 21:39:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python编写一个bruteforce字符串生成器,itertools.combinations_with_replacement似乎就可以做到这一点。在

gen = itertools.combinations_with_replacement('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',12)
for combination in gen:
  check(''.join(combination))

假设用户运行该程序几个小时,并达到字符串aaaeabdouzIU。在

有没有办法给一个字符串,让他们停下来,从那一点开始进行组合?在

所以如果我传递字符串'acc',它应该开始尝试'acd','ace',...

itertools.combinations_with_replacement本机不提供此功能,是否有人可以实现此功能?在


Tags: 字符串用户in功能forcheckwithgen
2条回答

如果你知道,给定一个组合,就很容易产生下一个。在

一种方法可以是定义从组合到自然数的映射,以及从自然数到组合的逆映射。例如,您可以使用base62_encode/base62_decode来自Base 62 conversion

def next_comb(s):
    return base62_encode(1+base62_decode(s))

以及一个生成所有组合的生成器给定一个起点:

^{pr2}$

用法:

for comb in generate_all():
    print(comb)

或者,从一个起点重新开始计算:

for comb in generate_all(starting_point):
    print(comb)

itertools man page获取原始代码,用替换代码复制组合的代码,但用从输入的单词开始的新索引替换第7行。在

inputStr='acc'
indices=[pool.index(l) for l in inputStr]

然后运行手册页中的其余代码。在

编辑:完整的运行功能:

^{pr2}$

相关问题 更多 >