我被分配了一项作业,以查找给定单词的所有可能序列。例如。如果为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
答案 0 :(得分:0)
Itertools和列表推导非常适合将此类内容分解。
import itertools
["".join(x) for y in range(1, len(word) + 1) for x in itertools.permutations(word, y)]