前言
排列组合问题在是算法中很基础的一个问题,它们的区别就是,排列要考虑顺序,组合不考虑顺序。在面试的过程中可能会考到,在现实生活中也是经常可以遇到的,比如说一个3位数字的密码锁,要尝试多少次才能解开?那么用python有哪些方法可以解决此类问题呢?
问题
以一个具体的例子来说明在python中此类问题的可能解决方法,要求给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
方法一:for循环遍历
num_list = [1,2,3]
result = []
for i in num_list:
for j in num_list:
for k in num_list:
if len(set((i,j,k))) == 3:#去重后长度仍为3的话说明i,j,k的值都不相同
result.append(list((i,j,k)))
print(result)
输出结果:
说明:for循环遍历是很容易想到的方法,但是如果列表中的元素比较多的时候那么嵌套的for循环就会很多,写起来很麻烦。
方法二:itertools模块中的permutations方法<