Использование рекурсии для создания последовательностей слова - PullRequest
0 голосов
/ 17 октября 2018

Мне дали домашнее задание, чтобы найти все возможные последовательности данного слова.например.если word = 'abc', приведенный ниже код вернет ['a', 'ab', 'abc', 'ac', 'acb', 'b', 'ba', 'bac', 'bc', 'bca', 'c', 'ca', 'cab', 'cb', 'cba'].

Однако это неэффективно.Я только начинаю изучать рекурсию, поэтому я не уверен, есть ли лучший или более эффективный способ создания этих последовательностей?

edit: я думаю, что необходимо добавить пару вещей, поскольку я продолжал работатьи чтение материала

  • Дубликаты в порядке, они отсортированы в отдельной функции
  • Каждое значение уникально, поэтому последовательность 'aab' должна создавать две последовательности 'aa'

def gen_all_strings(word):
    if len(word) == 1:
        return list(word)
    else:
        main_list = list()
        for idx in range(len(word)):
            cur_val = word[idx]
            rest = gen_all_strings(word[:idx] + word[idx+1:])
            main_list.append(cur_val)
            for seq in rest:
                main_list.append(cur_val + seq)
        return main_list

1 Ответ

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

Itertools и списочные выражения хороши для разбивки таких вещей.

import itertools

["".join(x) for y in range(1, len(word) + 1) for x in itertools.permutations(word, y)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...