Как я могу создать слова определенной длины, состоящие из a и b? - PullRequest
1 голос
/ 09 октября 2019

Я хочу создать список всех слов определенной длины (например, от 1 до 3), состоящий из двух букв. Таким образом, мой вывод будет: a, b, aa, ab, ba, bb, .... но я изо всех сил пытаюсь рекурсивно реализовать его в python. Какой правильный способ сделать это?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Я скомбинировал 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), я уверен, что вы узнаете что-то полезное из этого.

0 голосов
/ 10 октября 2019

Я полагаю, что вы можете использовать itertools для этого, и это более питонический способ решения проблемы.

list = ['a','b','c']

import itertools
for letter in itertools.permutations(list):
      list.append(' ',join(letter))

это даст вам:

list = ['a', 'b', 'c', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba']

Перестановки Python-рекурсии

Это также может помочь вам.

...