Python循环实现n的全排列功能
描述:
输入一个大于0的整数n,输出1到n的全排列:
例如:
n=3,输出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]] n=4,输出[[4, 3, 2, 1], [3, 4, 2, 1], [3, 2, 4, 1], [3, 2, 1, 4], [4, 2, 3, 1], [2, 4, 3, 1], [2, 3, 4, 1], [2, 3, 1, 4], [4, 2, 1, 3], [2, 4, 1, 3], [2, 1, 4, 3], [2, 1, 3, 4], [4, 3, 1, 2], [3, 4, 1, 2], [3, 1, 4, 2], [3, 1, 2, 4], [4, 1, 3, 2], [1, 4, 3, 2], [1, 3, 4, 2], [1, 3, 2, 4], [4, 1, 2, 3], [1, 4, 2, 3], [1, 2, 4, 3], [1, 2, 3, 4]]
思路:
为1时,结果为1 为2时,结果就是两种:1,2 2,1(1的前后插入) 为3时,结果就是六种:1,2,3 1,3,2 3,2,1 (1,2的前中后插入) 3,2,1 2,3,1 2,1,3 (2,1的前中后插入)
代码:
import copy def full_arrange(n): data = [] # 中间结果 res = [] # 最终结果 if n == 1 : return 1 res = [[1]] for i in range(2, n+1): for j in range(len(res)): # 遍历res数组(二维数组) for x in range(len(res[j])+1): # 遍历res数组中的元素(一维数组) data = copy.copy(res[j]) # 浅拷贝 data.insert(x,i) # 在一维数组的不同位置插入元素,获得新的数组 res.append(data) x += 1 j += 1 # 删除多余数组(原始数组) 最后保留的数据(一维数组的长度) == i while True: if len(res[0]) != i: res.remove(res[0]) else: break i += 1 return res print(full_arrange(n))
总结
以上所述是小编给大家介绍的Python循环实现n的全排列功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
相关推荐
-
python标准算法实现数组全排列的方法
本文实例讲述了python标准算法实现数组全排列的方法,代码来自国外网站.分享给大家供大家参考.具体分析如下: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. def Mideng(li): if(type(li)!=list): return if(len(li)==1): return [li] result=[] for i in range(0,len(li[:])): bak=li[:] h
-
python3实现字符串的全排列的方法(无重复字符)
最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说了,补习中... 抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_sort(s=''): if len(s) <= 1: return [s] st
-
python常规方法实现数组的全排列
本文实例讲述了常规方法实现python数组的全排列操作.分享给大家供大家参考.具体分析如下: 全排列解释:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. def perm(l): if(len(l)<=1): return [l] r=[] for i in range(len(l)): s=l[:i]+l[i+1:] p=perm(s) for x in p: r.append(l[i:i+1]+x
-
对Python中的条件判断、循环以及循环的终止方法详解
条件判断 条件语句是用来判断给定条件是否满足,并根据判断所得结果从而决定所要执行的操作,通常的逻辑思路如下图: 单次判断 形式 if <判断条件>: <执行> else: <执行> 例子 age = int(input("输入你的年龄:")) if age < 18: print("未成年") else: print("已成年") 多次判断 形式 if <判断条件1>: <执行1>
-
python for 循环获取index索引的方法
使用 enumerate 函数 可以返回下标. 例如 for inx, val in enumerate(['uyy', 'dfdf']): print(inx) print(val) 结果是 0 uyy 1 dfdf 以上这篇python for 循环获取index索引的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
python递归全排列实现方法
本文实例为大家分享了python递归全排列的实现方法,供大家参考,具体内容如下 排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 递归思想: 取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列 1)如果数组只有一个元素n=1,a={1} 则全排列就是
-
python回溯法实现数组全排列输出实例分析
本文实例讲述了python回溯法实现数组全排列输出的方法.分享给大家供大家参考.具体分析如下: 全排列解释:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. from sys import stdout #code from http://www.jb51.net/ def perm(li, start, end): if(start == end): for elem in li: stdout.wr
-
python使用递归解决全排列数字示例
第一种方法:递归 复制代码 代码如下: def perms(elements): if len(elements) <=1: yield elements else: for perm in perms(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:] for item in li
-
Python循环实现n的全排列功能
描述: 输入一个大于0的整数n,输出1到n的全排列: 例如: n=3,输出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]] n=4,输出[[4, 3, 2, 1], [3, 4, 2, 1], [3, 2, 4, 1], [3, 2, 1, 4], [4, 2, 3, 1], [2, 4, 3, 1], [2, 3, 4, 1], [2, 3, 1, 4], [4, 2, 1, 3], [2, 4, 1, 3],
-
Python PyQt5实现的简易计算器功能示例
本文实例讲述了Python PyQt5实现的简易计算器功能.分享给大家供大家参考,具体如下: 这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30)) 3.取事件的的发送者(此例为各个按钮)的文本: self.sender().text() [效果图] [源代码] import sys from PyQt
-
Python实现多线程抓取网页功能实例详解
本文实例讲述了Python实现多线程抓取网页功能.分享给大家供大家参考,具体如下: 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2.DNS处理,使用的adns异步的开源组件: 3.对于url队列的处理,则是用部分缓存到内存,部分写入文件的策略. 4.larbin对文件的相关操作做了很多工作 5.在larbin里有连接池,通过创建套接字,向目标站点
-
Python基于递归实现电话号码映射功能示例
本文实例讲述了Python基于递归实现电话号码映射功能.分享给大家供大家参考,具体如下: 问题 电话按键上面的每个数字都对应着几个字母,如果按下一个数字键代表输入一个字母,那么输入一个数字组成的字符串,它所产生的所有的可能的字母串是什么,有多少种 思路: 这个是一个递归的问题 下面是具体的实现,为了更清晰看懂递归调用的过程,这里打印出来了每一次递归的过程: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:电话号码映射 '
-
Python实现的读写json文件功能示例
本文实例讲述了Python实现的读写json文件功能.分享给大家供大家参考,具体如下: 相比java,python对json文件的处理就简单很多.java操作json文件的话需要引用jar包及相关依赖包,想用java操作json的同学可以去百度,这里就不赘述了. 首先说读json文件 在进行json操作之前,首先要了解json的格式,分辨json文件. json文件格式一般有两种: 第一种:每行一个json类似于以下这种形式: ["name":"Tony",&quo
-
Python用字典构建多级菜单功能
相关知识点: #key-value #字典是无序的,因为他没有下标,通过key找 info={ 'stu01':"liuhaolai", 'stu02':"wangshulin" } print(info['stu01']) info['stu03']='刘**'#若不存在该key,则直接添加 info['stu04']='王##' print(info) #del del info['stu03'] print(info) #pop info.pop('stu04
-
使用Python实现跳一跳自动跳跃功能
1. OpenCV:模板匹配. 获得小跳棋中心位置 2. OpenCV:边缘检测. 获得下一方块中心位置 Python+ADB+OpenCv,实现「 跳一跳 」自动化. / 01 / ADB ADB工具即Android Debug Bridge(安卓调试桥) tools. ADB 是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互. 与之前小F接触过的Appium有点相似. ADB的安装很简单,就是将安装包解压后,将路径添加到系统的环境变量中即可. 然后使用Python
-
Python实现的企业粉丝抽奖功能示例
本文实例讲述了Python实现的企业粉丝抽奖功能.分享给大家供大家参考,具体如下: 一 代码 def scode9(schoice): default_dir = r"lottery.ini" # 设置默认打开文件为开发路径下的"lottery.ini" # 选择包含用户抽奖信息票号的文件,扩展名为"*.ini" file_path = tkinter.filedialog.askopenfilename(filetypes=[("In
-
Python 3.8正式发布重要新功能一览
Python3.8有哪些你要关注的新内容? Python3.8 都有哪些新功能,在文档手册中,大家可以有一个概览.这么多新内容,哪些是大家最先要关注一下的呢?下面,营长就带大家从深度和广度两方面,了解那些最大的变化,帮助大家快速上手 Python3.8. 新功能手册: https://docs.python.org/3.8/whatsnew/3.8.html 在本文中,你将了解到Python 3.8如何: 使用赋值表达式简化一些代码结构 在你自己的函数中强制执行仅位置参数 指定更精确的类型提示
-
用Python实现校园通知更新提醒功能
前言 这个项目实已经在一个月前已经完成了,一直都想写一篇博客来总结这个过程中遇到的一些问题.但最近一个月来都比较忙,所以一直拖到了现在. 首先说说起因吧,我没事的时候,总喜欢依次点开学校主页.教务处.图书馆以及学院的网站,看看有没有什么新通知,虽然大多与我无关.恰逢最近正在学Python,经常听到别人说用Python写爬虫很简单,但自己尚未接触过爬虫.于是抱着试一试的心态看了几篇关于Python爬虫的博客,发现实现起来的确很简单.于是,便一边看着官方的文档说明,一边看着别人的博客,终于完成了自己
随机推荐
- Angular JS数据的双向绑定详解及实例
- Android实战教程第一篇之最简单的计算器
- JAVA设计模式之建造者模式原理与用法详解
- MyBatis 引入映射器的方法
- IsPostBack原理的介绍
- "好玩的放大镜效果" 的另一种实现方法
- 第二章 PHP入门基础之php代码写法
- Linux shell中的printf的详细用法
- java实现网页解析示例
- Ruby on Rails下的图像处理入门教程
- 实例讲解Java批量插入、更新数据
- PHP中的output_buffering详细介绍
- 今天抽时间给大家整理jquery和ajax的相关知识
- 基于jquery扩展漂亮的CheckBox(自己编写)
- URLScan工具配置方法第1/2页
- js常用数组操作方法简明总结
- php metaphone()函数的定义和用法
- Android清除工程中无用资源文件的两种方法
- Eclipse中使用ANT
- iOS登录时验证手机号与倒计时发送验证码问题详解