3 回答
TA贡献1876条经验 获得超5个赞
你可以利用itertools.product():
from itertools import product
from string import ascii_lowercase
for i in range(1, 4):
for x in product(ascii_lowercase, repeat=i):
print(''.join(x))
首先,您需要所有字母,然后是所有对,然后是所有三元组等等。这就是为什么我们首先需要遍历您想要的所有字符串长度 ( for i in range(...))。
然后,我们需要与i字母的所有可能的关联,因此我们可以使用product(ascii_lowercase)which 等效于嵌套for循环重复i次数。
这将生成i所需大小的元组,最后只生成join()一个字符串。
要无限制地连续生成名称,请将for循环替换为while:
def generate():
i = 0
while True:
i += 1
for x in product(ascii_lowercase, repeat=i):
yield ''.join(x)
generator = generate()
next(generator) # 'a'
next(generator) # 'b'
...
TA贡献1817条经验 获得超6个赞
对于通用解决方案,我们可以使用生成器和islice来自itertools:
import string
from itertools import islice
def generate():
base = ['']
while True:
next_base = []
for b in base:
for i in range(26):
next_base.append(b + string.ascii_lowercase[i])
yield next_base[-1]
base = next_base
print('\n'.join(islice(generate(), 1000)))
和输出:
a
b
c
...
z
aa
ab
...
zz
aaa
aab
...
您可以islice根据需要使用任意数量的字符串。
添加回答
举报