Допустим, у меня есть слово «стопка», и для каждой из его букв есть число, которое будет определять количество повторений буквы.В файле JSON у меня будет следующее:
{
"s": 4,
"t": 3,
"a": 2,
"c": 5,
"k": 2
}
Из этого я хотел бы создать полное дерево всех возможных комбинаций, а именно:
Depth 1: stack
Depth 2: stack, sstack, ssstack, sssstack
Depth 3: stack, sttack, stttack, sstack, ssttack, sstttack,ssstack, sssttack, ssstttack, sssstack, ssssttack, sssstttack
Depth 4: ... with 'a'
Depth 5: ... with 'c'
Depth 6: ... with 'k'
Это даст 4 *3 * 2 * 5 * 2 = 240 возможностей.Кроме того, у меня есть эти функции от кого-то, кого я спросил здесь несколько дней назад, и который я немного изменил:
def all_combinations(itr):
lst = list(itr)
for r in range(1, len(lst) + 1):
for perm in itertools.combinations(lst, r=r):
yield perm
def all_repeats(n, letters, word):
for rep in all_combinations(letters):
yield ''.join(char * n if char in rep else char for char in word)
Что дает мне:
word = 'stack'
for i in range(1,5):
liste.append(''.join(list(all_repeats(i, ['s'], word))))
Output: ['stack', 'sstack', 'ssstack', 'sssstack']
Отсюда, какя могу рекурсивно вызвать эту функцию, чтобы создать все возможности, учитывая пару (букву, число) в файле JSON?