Я скомбинировал itertools
и рекурсию в следующем коде:
from itertools import product,chain
ab = ['a', 'b']
def rec_prod(x):
if x==1:
return ab
elif x==2:
return list(product(ab, ab))
else:
return [tuple(chain((i[0],), i[1])) for i in product(ab, rec_prod(x-1))]
prod_range = lambda y: list(chain.from_iterable(rec_prod(j) for j in range(1, y+1)))
Первая функция рекурсивно вычисляет все «слова» длины x, вторая возвращает все слова от длины 1 до длины y,Это немного грязно и не очень эффективно, но если вы изучите, как я использовал рекурсию и функцию itertools, которую я использовал (product
и chain
), я уверен, что вы узнаете что-то полезное из этого.