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中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
python 编写简单网页服务器的实例
Jun 01 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
如何理解python中数字列表
May 29 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 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转成EXE文件
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
Python获取系统默认字符编码的方法
2015/06/04 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python中函数参数调用方式分析
2018/08/09 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
Ruby如何定义一个类
2012/10/08 面试题
网上书店创业计划书
2014/01/12 职场文书
大型晚会策划方案
2014/02/06 职场文书
实用的简历自我评价
2014/03/06 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
道路建设实施方案
2014/03/18 职场文书
和谐社区口号
2014/06/19 职场文书
公司介绍信范文
2015/01/31 职场文书
导游词之介休绵山
2019/12/31 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL