# 全排列函数permutation,需要使用递归来列举,也是一个知识点(参考网络) # 除了使用模块,当然可以自己写一个函数来实现: #下面是字典序 defpermutation(xs):#简化问题,假定形参xs是列表 if len(xs) == 0or len(xs) == 1: return [xs] result = [] for i in xs: temp_list = xs[:] #对xs进行切片操作,使得temp_list的值和xs一样 但是temp_list的改变不影响xs temp_list.remove(i) temp = permutation(temp_list) #使用递归 生成删掉一个元素的xs的全排列 for j in temp: #对temp中的每一项再进行遍历 j.insert(0,i) #j[0:0] = [i]在index 0 的位置插入之前删去的i result.append(j) return result
for i in permutation([1,2,3,4]): print(i)
#下面是非字典序排列 li=[1,2,3,4] res=[] defPerm(m):#交换序 global li if m==len(li)-1 : res.append(li) else: for j in range(m,len(li)): li[j],li[m]=li[m],li[j] Perm(m+1) li=li[:] li[j],li[m]=li[m],li[j] Perm(0) for i in res: print(i) ''' 当用[:]赋值时,生成的是一个新的对象,改变时不会改变之前的值,是深拷贝 '''