Python中不使用itertools生成动态字符串的单词全排列
不使用itertools实现任意长度单词的全排列
完全可以通过递归方法实现,不需要依赖itertools模块,且能适配任意长度的输入字符串,解决你提到的“需要提前指定变量数量才能join”的问题。
核心思路
通过递归逐步构建排列:每次从剩余单词中选一个作为当前排列的首元素,再递归处理剩下的单词,直到所有单词都被使用,最终拼接成完整的排列字符串。
实现代码
def get_permutations(words): # 递归终止:剩余单词为空,返回空排列列表的列表 if not words: return [[]] permutations = [] for idx in range(len(words)): # 选取当前单词,并生成剩余单词列表 current = words[idx] remaining = words[:idx] + words[idx+1:] # 递归获取剩余单词的所有排列,拼接当前单词后加入结果 for p in get_permutations(remaining): permutations.append([current] + p) return permutations # 测试示例 if __name__ == "__main__": # 示例1:3个单词的情况 s1 = "James is King" words1 = s1.split() result1 = [' '.join(perm) for perm in get_permutations(words1)] print("输入'James is King'的输出:") for item in result1: print(item) print("\n" + "-"*30 + "\n") # 示例2:2个单词的情况 s2 = "Big Small" words2 = s2.split() result2 = [' '.join(perm) for perm in get_permutations(words2)] print("输入'Big Small'的输出:") for item in result2: print(item)
关键说明
- 适配任意长度:递归逻辑不依赖固定的单词数量,不管输入是1个、2个还是N个单词,都能自动生成所有全排列。
- 解决join的动态问题:每个排列结果是一个完整的单词列表,直接用
' '.join(perm)拼接即可,不需要提前知道单词数量来指定变量。 - 边界情况处理:如果输入只有单个单词(如
s="Hello"),会直接返回该单词本身;如果输入空字符串,会返回空列表(可根据需求调整)。
内容的提问来源于stack exchange,提问作者MOHAMMED ASIF KHAN
相关产品推荐
相关产品推荐

