Получение всех комбинаций или перестановок персонажа с использованием терминов - PullRequest
0 голосов
/ 21 июня 2019

Я хочу, чтобы все сочетания слов характера, используя термины.Пример:

word = 'aan'
result = ['ana', 'naa', 'aan']

условия:

количество символов 'a' -> 2
количество символов 'n' -> 1

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Я попробовал решение с одним вкладышем и выдаю результат в виде списка

Вы можете использовать инструменты перестановки из пакета itertools , чтобы получить все решения перестановок (не комбинаций)

from itertools import permutations
word = 'aan'
list(set([ ''.join(list(i)) for i in permutations(word,len(word))]))
0 голосов
/ 21 июня 2019

Вы можете использовать рекурсию с генератором:

from collections import Counter
def combo(d, c = []):
  if len(c) == len(d):
    yield ''.join(c)
  else:
    _c1, _c2 = Counter(d), Counter(c)
    for i in d:
      if _c2.get(i, 0) < _c1[i]:
        yield from combo(d, c+[i])

word = 'aan'
print(list(set(combo(word))))

Выход:

['aan', 'naa', 'ana']

word = 'ain'
print(list(set(combo(word))))

Выход:

['ina', 'nia', 'nai', 'ani', 'ian', 'ain']
0 голосов
/ 21 июня 2019

Если я действительно понимаю, что вы хотите, я бы сделал это так:

from itertools import permutations

result = set()
for combination in permutations("aan"):
    result.add(combination)
...