python 列表元素全排列

题目描述

  • 给定一个列表,对列表元素进行全排列,使得生成一个包含列表的列表,且全排列不能重复,例子:
    输入: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