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 相关文章推荐
详解Django中的过滤器
Jul 16 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
浅谈python迭代器
Nov 08 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Python实现的求解最大公约数算法示例
May 03 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Random 在 Python 中的使用方法
Aug 09 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
Django如何实现防止XSS攻击
Oct 13 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
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php绘制圆形的方法
2015/01/24 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python中title()方法的使用简介
2015/05/20 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
文员个人求职自荐信
2013/09/21 职场文书
竞聘书模板
2014/03/31 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
药店采购员岗位职责
2014/09/30 职场文书
2014年项目工作总结
2014/11/24 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
如何使用flask将模型部署为服务
2021/05/13 Python
Python数据类型最全知识总结
2021/05/31 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis