【发布时间】:2021-12-27 10:01:11
【问题描述】:
def gen_letters(s,l):
def __gen(s,l):
if l > 1:
for c in 'abcdefghijklmnopqrstuvwxyz ':
__gen(s+c,l-1)
else:
print(1)
for c in 'abcdefghijklmnopqrstuvwxyz ':
yield s+c
return __gen(s,l)
我正在尝试生成长度为“l”的字母表中的所有字母组合。此功能的预期用途是:
combos = gen_letters('', 10)
第二个参数是要返回的组合的长度。 例如,如果我想从字母表和空格中生成所有可能的 3 个字符长度的字符串,我应该得到 19683 个组合。当尝试使用“next(combos)”或“for combo in combos:”时(即使在第一个 next())我得到这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
非常感谢您的帮助:)
【问题讨论】:
-
好吧,
l > 1是真的,所以你执行了那个分支,这个分支没有任何结果。我认为您的意思是在递归调用中写yield from __gen(...)。 -
这能回答你的问题吗? Can generators be recursive?
标签: python-3.x generator yield