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网络爬虫采集联想词示例
Feb 11 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python单链表简单实现代码
Apr 27 Python
python机器学习实战之K均值聚类
Dec 20 Python
Python实现的质因式分解算法示例
May 03 Python
python实现Flappy Bird源码
Dec 24 Python
python生成带有表格的图片实例
Feb 03 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Keras搭建自编码器操作
Jul 03 Python
Python超详细分步解析随机漫步
Mar 17 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php数据库抽象层 PDO
2011/05/07 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python实现图片转字符画的示例
2017/08/22 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
在Python中定义一个常量的方法
2018/11/10 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
大专自我鉴定范文
2013/10/23 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
法制宣传月活动方案
2014/05/11 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
python析构函数用法及注意事项
2021/06/22 Python
vue实现简易音乐播放器
2022/08/14 Vue.js