1、问题描述 随机输一个list,列出list全排列 2、源代码 #use recursion to finish list 全排列 def full_sort(alist): full_list = [] if len(alist) == 1: return alist if len(alist) == 2: return [[alist[0],alist[1]],[alist[1],alist[0]]] if len(alist) > 2: for i in range(len(alist)): tmplist = alist.copy() tmp = tmplist[i] tmplist.pop(i) sub_full_list = full_sort(tmplist) for j in range(len(sub_full_list)): full_list.append([tmp]+sub_full_list[j]) return full_list
3、运行结果
[1, 2, 3, 4] [1, 2, 4, 3] [1, 3, 2, 4] [1, 3, 4, 2] [1, 4, 2, 3]
[1, 4, 3, 2] [2, 1, 3, 4] [2, 1, 4, 3] [2, 3, 1, 4] [2, 3, 4, 1]
[2, 4, 1, 3] [2, 4, 3, 1] [3, 1, 2, 4] [3, 1, 4, 2] [3, 2, 1, 4]
[3, 2, 4, 1] [3, 4, 1, 2] [3, 4, 2, 1] [4, 1, 2, 3] [4, 1, 3, 2]
[4, 2, 1, 3] [4, 2, 3, 1] [4, 3, 1, 2] [4, 3, 2, 1]
4、编码感想
列表长度越长,组合情况越复杂,直接穷举法有些困难。使用递归是最佳选择。找出n跟n-1的关系,直接实现即可