python - 使用递归制作单词序列
问题描述
我被分配了一项家庭作业,以找到给定单词的所有可能序列。例如。如果word = 'abc'
,下面的代码将返回['a', 'ab', 'abc', 'ac', 'acb', 'b', 'ba', 'bac', 'bc', 'bca', 'c', 'ca', 'cab', 'cb', 'cba']
。
但是,这感觉效率低下。我刚开始学习递归,所以我不确定是否有更好或更有效的方法来生成这些序列?
编辑:我认为有必要添加一些东西,因为我一直在工作和阅读材料
- 重复的很好,那些在一个单独的函数中排序
- 每个值都是唯一的,因此序列 '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
解决方案
Itertools 和列表推导非常适合像这样分解东西。
import itertools
["".join(x) for y in range(1, len(word) + 1) for x in itertools.permutations(word, y)]
推荐阅读
- flutter - 动态 S3 存储桶 URL 缓存 Flutter
- python - 如何将随机分类添加到数据框中?
- java - 检查二维数组Java中的行和列中是否存在数字
- javascript - 如何使用 PHP 动态创建价格范围
- mapping - 确定 Haswell 物理地址空间中的等级和通道位
- java - 将包含列表的列表重新排序到地图中
- android - 使用 NavHostFragment 时从当前 Fragment 返回到替换的 Fragment 的问题
- java - 为什么在 docker 映像中创建的 .war 文件在浏览器中不起作用?(Java-Servlets、Tomcat、Docker)
- python - 如何使用 tkinter 和 excel 制作交互式 python 网格
- sql - 如何查看在给定时间段内传入和传出 sql server 的数据量?