Вы можете использовать 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)
, что эквивалентно вложенному 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'
...