如何用Python生成单词的所有无重复全排列组合?
生成无重复单词全排列的实现方法
对于给定的唯一单词列表,生成所有无重复的全排列,这里用Python给你两种新手友好的实现方式:
方法一:借助Python标准库快速实现
Python的itertools模块里的permutations函数专门用来生成序列的全排列,因为你的输入列表里所有单词都是唯一的,所以生成的排列自然不会有重复。
代码示例:
import itertools words = ["Love", "Is", "What", "I", "Care", "About"] # 生成所有全排列,permutations返回的是元组迭代器 all_permutations = itertools.permutations(words) # 将每个排列元组转为空格分隔的字符串 result = [' '.join(perm) for perm in all_permutations] # 打印部分结果(6个单词的全排列共720种,全部打印过于冗长) for idx, perm_str in enumerate(result[:5], 1): print(f"{idx}. {perm_str}")
代码解释:
itertools.permutations(words):接收输入列表,返回一个迭代器,每个元素是原列表元素的一个全排列元组(比如('Love', 'Is', 'What', 'I', 'Care', 'About'))' '.join(perm):把排列元组里的单词用空格连接成你需要的字符串格式- 6个不同元素的全排列总数是
6! = 720,这里只打印前5个示例,你可以根据需求调整打印范围。
方法二:手动实现递归(理解底层原理)
如果想搞懂全排列的逻辑,可以用递归方式实现,核心思路是:每次从剩余未使用的单词里选一个,加到当前排列中,直到所有单词都被使用,就得到一个完整的排列。
代码示例:
words = ["Love", "Is", "What", "I", "Care", "About"] result = [] def generate_permutations(current, remaining): # 剩余单词为空时,当前排列完成,加入结果列表 if not remaining: result.append(' '.join(current)) return # 遍历剩余的每个单词,逐个选择并递归生成排列 for i in range(len(remaining)): new_current = current + [remaining[i]] new_remaining = remaining[:i] + remaining[i+1:] generate_permutations(new_current, new_remaining) # 初始调用:当前排列为空,剩余单词是全部输入 generate_permutations([], words) # 打印前5个结果 for idx, perm_str in enumerate(result[:5], 1): print(f"{idx}. {perm_str}")
代码解释:
current:保存当前已选好的单词列表remaining:保存尚未被使用的单词列表- 当
remaining为空时,说明所有单词都已选完,将current转为字符串加入结果 - 循环遍历
remaining中的每个单词,每次选择一个后更新current和remaining,递归继续生成后续排列
内容的提问来源于stack exchange,提问作者Light
相关产品推荐
相关产品推荐

