Объединить два символа всеми возможными способами без itertools до определенной длины в Python - PullRequest
0 голосов
/ 05 октября 2018

Я хочу генерировать строки со всеми возможными комбинациями из двух символов определенной длины.Например, если я хочу сгенерировать все строки длиной 3 с символами 'a' и 'b', я хочу следующий вывод (не в списке):

aaa
aab
aba
baa
bbb
bba
abb
bbb

Я определил две функции:

def replace(string,char):
    y = string[1] 
    for i in range(1,len(string)):
        string = string[:i].replace(y,char) + string[i:]
        print(string)

def powerset(char1,char2,longitud):
"""FUnction to get all the combinations
of two characters of a certain length """
    x = char1*longitud
    print (x)
    replace(x, char2)
    y = char2* longitud
    replace(y, char1)
    print (y)

Если я запускаю код с длиной 3, я получаю только 6 из 8 комбинаций:

powerset('a','b',3)
aaa
baa
bba
abb
aab
bbb

Я все еще скучаю по bab и abaкомбинации.Если я добавлю 4 в функцию powerset, я получу 8 из 16 возможных комбинаций.Должен быть самый простой способ решения проблемы, но я застрял.Есть ли у вас какие-либо идеи?

1 Ответ

0 голосов
/ 05 октября 2018

Простая рекурсивная функция генератора :

def combos(chars, length):
  if length == 0:
    yield ''
    return
  for char in chars:
    for combo in combos(chars, length-1):
      yield char + combo

>>> list(combos('ab', 3))
['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']
...