Python全排列操作实例分析


Posted in Python onJuly 24, 2018

本文实例讲述了Python全排列操作。分享给大家供大家参考,具体如下:

step 1: 列表的全排列:

这个版本比较low

# -*-coding:utf-8 -*-
#!python3
def permutation(li,index):
  for i in range(index,len(li)):
    if index == 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
def permutation(str):
  li = list(str)
  cnt = 0 #记录全排列的总数
  def permutation_list(index):
    if index == len(li) -1:
      nonlocal cnt
      cnt += 1
      print(li)
    for i in range(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)
  return ret

备注:

在闭包中,内部函数依然维持了外部函数中自由变量的引用—单元。内部函数不能修改单元对象的值(但是可以引用)。若尝试修改,则解释器会认为它是局部变量。这类似于全局变量和局部变量的关系。如果在函数内部修改全局变量,必须加上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标准库

import itertools
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)]

可以指定排列的位数:

import itertools
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使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
在Django的模板中使用认证数据的方法
Jul 23 Python
django自带的server 让外网主机访问方法
May 14 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
使用Python获取字典键对应值的方法
Apr 26 Python
python保存网页图片到本地的方法
Jul 24 #Python
python中reader的next用法
Jul 24 #Python
使用Flask集成bootstrap的方法
Jul 24 #Python
用python统计代码行的示例(包括空行和注释)
Jul 24 #Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 #Python
Python常见MongoDB数据库操作实例总结
Jul 24 #Python
Python实现端口检测的方法
Jul 24 #Python
You might like
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python实现人民币大写转换
2018/06/20 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Django后台admin的使用详解
2019/07/08 Python
selenium自动化测试入门实战
2020/12/21 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
护理工作感言
2014/01/16 职场文书
高一学生评语大全
2014/04/25 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
谢师宴邀请函
2015/02/02 职场文书
高一英语教学反思
2016/03/03 职场文书