Python全排列操作实例分析
本文实例讲述了Python全排列操作。分享给大家供大家参考,具体如下:
step1:列表的全排列:
这个版本比较low
#-*-coding:utf-8-*- #!python3 defpermutation(li,index): foriinrange(index,len(li)): ifindex==len(li)-1: print(li) return tmp=li[index] li[index]=li[i] li[i]=tmp permutation(li,index+1) tmp=li[index] li[index]=li[i] li[i]=tmp
调用:
permutation([1,2,3,4],0)
运行结果:
[1,2,3,4]
[1,2,4,3]
[1,3,2,4]
[1,3,4,2]
[1,4,3,2]
[1,4,2,3]
[2,1,3,4]
[2,1,4,3]
[2,3,1,4]
[2,3,4,1]
[2,4,3,1]
[2,4,1,3]
[3,2,1,4]
[3,2,4,1]
[3,1,2,4]
[3,1,4,2]
[3,4,1,2]
[3,4,2,1]
[4,2,3,1]
[4,2,1,3]
[4,3,2,1]
[4,3,1,2]
[4,1,3,2]
[4,1,2,3]
step2:字符串的全排列:
#-*-coding:utf-8-*- #!python3 defpermutation(str): li=list(str) cnt=0#记录全排列的总数 defpermutation_list(index): ifindex==len(li)-1: nonlocalcnt cnt+=1 print(li) foriinrange(index,len(li)): li[index],li[i]=li[i],li[index] permutation_list(index+1) li[index],li[i]=li[i],li[index] ret=permutation_list(0) print("共有%d中全排列"%cnt) returnret
备注:
在闭包中,内部函数依然维持了外部函数中自由变量的引用—单元。内部函数不能修改单元对象的值(但是可以引用)。若尝试修改,则解释器会认为它是局部变量。这类似于全局变量和局部变量的关系。如果在函数内部修改全局变量,必须加上global声明,但是对于自由变量,尚没有类似的机制。所以,只能使用列表。(python3中引入了关键字:nonlocal)
测试:
permutation('abcd')
运行结果:
['a','b','c','d']
['a','b','d','c']
['a','c','b','d']
['a','c','d','b']
['a','d','c','b']
['a','d','b','c']
['b','a','c','d']
['b','a','d','c']
['b','c','a','d']
['b','c','d','a']
['b','d','c','a']
['b','d','a','c']
['c','b','a','d']
['c','b','d','a']
['c','a','b','d']
['c','a','d','b']
['c','d','a','b']
['c','d','b','a']
['d','b','c','a']
['d','b','a','c']
['d','c','b','a']
['d','c','a','b']
['d','a','c','b']
['d','a','b','c']
共有24中全排列
step3:使用python标准库
importitertools t=list(itertools.permutations([1,2,3,4])) print(t)
运行结果:
[(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)]
可以指定排列的位数:
importitertools t=itertools.permutations([1,2,3,4],3)#只排列3位 print(list(t))
运行结果:
[(1,2,3),(1,2,4),(1,3,2),(1,3,4),(1,4,2),(1,4,3),(2,1,3),(2,1,4),(2,3,1),(2,3,4),(2,4,1),(2,4,3),(3,1,2),(3,1,4),(3,2,1),(3,2,4),(3,4,1),(3,4,2),(4,1,2),(4,1,3),(4,2,1),(4,2,3),(4,3,1),(4,3,2)]
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。