首页 > 解决方案 > 使用递归制作单词序列

问题描述

我被分配了一项家庭作业,以找到给定单词的所有可能序列。例如。如果word = 'abc',下面的代码将返回['a', 'ab', 'abc', 'ac', 'acb', 'b', 'ba', 'bac', 'bc', 'bca', 'c', 'ca', 'cab', 'cb', 'cba']

但是,这感觉效率低下。我刚开始学习递归,所以我不确定是否有更好或更有效的方法来生成这些序列?

编辑:我认为有必要添加一些东西,因为我一直在工作和阅读材料


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

标签: pythonpython-3.xrecursionsequence

解决方案


Itertools 和列表推导非常适合像这样分解东西。

import itertools

["".join(x) for y in range(1, len(word) + 1) for x in itertools.permutations(word, y)]

推荐阅读