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 Django模板的使用方法
Jan 14 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
如何基于Python批量下载音乐
Nov 11 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Python双链表原理与实现方法详解
Feb 22 Python
Python实现爬取并分析电商评论
Jun 19 Python
python定义类的简单用法
Jul 24 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
Python中的程序流程控制语句
Feb 24 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
codeigniter中测试通过的分页类示例
2014/04/17 PHP
浅析php单例模式
2014/11/25 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
angular2使用简单介绍
2016/03/01 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python刷投票的脚本实现代码
2014/11/08 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python实现简单http服务器
2018/04/12 Python
python多进程间通信代码实例
2019/09/30 Python
python用requests实现http请求代码实例
2019/10/31 Python
python 实现兔子生兔子示例
2019/11/21 Python
Django实现celery定时任务过程解析
2020/04/21 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
如何使用PHP session
2015/04/21 面试题
几个数据库方面的面试题
2016/07/01 面试题
小车司机岗位职责
2013/11/25 职场文书
服务员岗位责任制
2014/02/11 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python