Последовательный алгоритм генерации из списка Python
Мне нужен генератор, который из списка lettrs
rawlettrs = "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
lettrs = list(rawlettrs)
генерировал бы бесконечное количество своеобразных "кодов". Вот как должен выглядеть выход (запятые замените на переносы строк, в квадратных скобках мои пометки, которых не должно быть в генерации):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, [Несколько миллисекунд спустя], Y, Z, a, b, [Еще мгновение...], z, 00, 01, 01, 03, 04, 05, 06, 07, 08, 09, 0A, [Еще пару миллисекунд спустя], 0z, 10, 11, 12, 13, [Пропустим некоторое время], zy, zz, 000, [И так до бесконечности]
Ответы (3 шт):
Автор решения: Кирилл Малышев
→ Ссылка
from itertools import count, combinations_with_replacement
def gen():
rawletters = "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for length in count(1):
for res in combinations_with_replacement(rawletters, length):
yield ''.join(res)
Автор решения: GrAnd
→ Ссылка
def weird_gen():
rawlettrs = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for lettr in rawlettrs:
yield lettr
for prefix in weird_gen():
for lettr in rawlettrs:
yield prefix + lettr
Автор решения: TigerTV.ru
→ Ссылка
Вариант с product(по сути, переделка ответа @Кирилл Малышев)
from itertools import product, count
def gen():
alphabet = "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for length in count(1):
for res in product(alphabet, repeat=length):
yield ''.join(res)