Python全排列操作实例分析
作者:wanlifeipeng 发布时间:2023-08-24 20:17:54
本文实例讲述了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程序设计有所帮助。
来源:http://www.cnblogs.com/hupeng1234/p/6681275.html


猜你喜欢
- 下面是十个Python中很有用的贴士和技巧。其中一些是初学这门语言常常会犯的错误。注意:假设我们都用的是Python 31. 列表推导式你有
- 安装过程询问一般 y 就可以了1 安装1.1 下载wget https://dev.mysql.com/get/mysql-apt-conf
- 在之前的文章中,我们介绍了PyQt5和PySide2中主窗口控件MainWindow的使用、窗口控件的4中基础布局管理。从本篇开始,我们来了
- 背景形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果;形态学的处理哦本质上相当于对图像做前处理,提取出有用的特征,以便
- 我们经常会看到后缀名为.pt, .pth, .pkl的pytorch模型文件,这几种模型文件在格式上有什么区别吗?其实它们并不是在格式上有区
- 在使用reflect包获取函数,并调用时,总出现这个报错:panic: reflect: call of reflect.Value.Cal
- 1、在Django配置搜索结果页的路由映射"""pachong URL Configuration
- 从某个页面表单中取出信息是ASP编程中常见的问题。但是,遍历通过表单传递的记录会花去多长时间呢?这取决于数据库的大小。简单的GUI界面都可能
- 本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下:官方文档 – https://docs.opencv.or
- 本文实例讲述了python自动化之Ansible的安装。分享给大家供大家参考,具体如下:一 点睛Ansible只需在管理端部署环境即可,建议
- 爬取过程:你好,李焕英 短评的URL:https://movie.douban.com/subject/34841067/comments?
- java JSP开发之Spring中Bean的使用在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例
- 如何截取字符函数在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的x
- 从网上找了很多django单元测试的案例,感觉不是很好用,于是自己写了一套测试方法,在测试环境我们只需要传uri 、请求方式、参数即可
- Python是一门面向对象的语言。面向对象都有三大特性:封装、继承、多态。下面分别来说说这三大特性:1、封装隐藏对象的属性和实现细节,仅对外
- 本文实例讲述了JavaScript闭包与作用域链。分享给大家供大家参考,具体如下:闭包定义闭包指的是有权访问另一个函数作用域中的变量的函数。
- 1. 安装依赖pip install pypiserver passlib2. 创建packages目录mkdir packages3. 以
- 前言:本系列文章主要参考了《Ultimate ASP.NET Core 3 Web API》一书,对原文进行了翻译,同时适当删减、修改了一部
- 字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字
- 用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般采集程序就几个文件,