如何在Python中生成无重复的列表全排列集合
生成列表全排列的最优方案
你要的这种无重复、长度与原列表一致的有序组合,本质就是全排列,Python标准库的itertools里专门有permutations()函数实现这个功能,完全匹配你的需求:
示例代码
import itertools original_list = [1, 2, 3] # 生成所有全排列,返回的是元组迭代器 for permutation in itertools.permutations(original_list): print(permutation)
运行这段代码会输出你需要的所有结果:
(1, 2, 3)、(1, 3, 2)、(2, 1, 3)、(2, 3, 1)、(3, 1, 2)、(3, 2, 1)
关于扩展性问题
itertools.permutations()是基于C实现的底层逻辑,性能远优于纯Python手写的排列算法,也比你用itertools其他组件拼接的方案高效得多。需要注意的是,全排列的数量是n!(n为列表长度),当n过大时,这个数量会指数级增长,超出内存和计算能力是排列问题的固有特性,但permutations()已经是Python标准库中最优化的实现方案了。
内容的提问来源于stack exchange,提问作者TerryStone
相关产品推荐
相关产品推荐

