适当时退出itertool.product循环

2024-06-28 15:40:47 发布

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

printable = '0123456789abcdefghijklmnopqrstuvwxyz'

unknown = "abcd"

[''.join(i) for i in itertools.product(printable, repeat = 4)]

我正试图找到一种方法,在itertool行中嵌入一些东西来实现这一点:

if i == unknown:
    print("the unknown was", i)

然后打破循环。这样做的理由是,我想有能力搜索较长的单词,而不必填满记忆


Tags: the方法inforifproductunknownrepeat
1条回答
网友
1楼 · 发布于 2024-06-28 15:40:47

列表理解并不是真正用于此任务,而是用于创建列表

看起来你想要的是:

printable = '0123456789abcdefghijklmnopqrstuvwxyz'
unknown = "abcd"

for i in itertools.product(printable, repeat = 4):
    guess = ''.join(i) 
    if guess == unknown:
        print("the unknown was", i)
        break

但是,如果仍然需要一个单行程序,可以使用生成器表达式。生成器表达式与列表理解完全相同,只是它们不存储下一个元素。我们可以像列表一样使用它们,或者用next(gen)获取下一个元素

printable = '0123456789abcdefghijklmnopqrstuvwxyz'
unknown = "abcd"

correct = next(''.join(i) for i in itertools.product(printable, repeat = 4) if ''.join(i) == unknown)
print("the unknown was", correct)

相关问题 更多 >