题目描述
- 给定一个列表,对列表元素进行全排列,使得生成一个包含列表的列表,且全排列不能重复,例子:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
实现方式
-
使用python 自带的itertools.permutations函数,专门用于生成排列,非常方便。但注意的是permutations 的返回值是元组,不是列表
点击查看代码
num = [1, 2, 3, 3] from itertools import permutations all_permutations = list(list(i) for i in set(permutations(num))) print(all_permutations) -
自己写代码实现,使用递归,每次将列表中一个元素提取出来,然后让其他元素全排列,得到全排列的组合后,再将第一个元素插入到全排列的列表中的各个位置,就得到了想要的结果
点击查看代码
num = [1, 2, 3, 3] def fullnum(nums): if len(nums) == 0: return None elif len(nums) == 1: return [nums] res = [] left = nums[0] right = fullnum(nums[1:]) for i in right: for j in range(len(i)+1): result = i[:j] + [left] + i[j:] if result not in res: res.append(result) return res print(fullnum(num))
文章摘自:https://www.cnblogs.com/yzysimpletest/p/19712546
