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实现给文件添加内容及得到文件信息的方法
May 28 Python
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 Python
python实现定时提取实时日志程序
Jun 22 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
Django web框架使用url path name详解
Apr 29 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
基于python判断目录或者文件代码实例
Nov 29 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
Python 实现try重新执行
Dec 21 Python
Django 路由层URLconf的实现
Dec 30 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
如何在mac下配置python虚拟环境
Jul 06 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
header导出Excel应用示例
2014/01/24 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
js实现微信聊天界面
2020/08/09 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python正则表达式re模块详解
2014/06/25 Python
Python中os.path用法分析
2015/01/15 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Django的models中on_delete参数详解
2019/07/16 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
给海归自荐信的建议
2013/12/13 职场文书
校园文明标语
2014/06/13 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
给校长的一封检讨书
2014/09/20 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python