Python循环实现n的全排列功能


Posted in Python onSeptember 16, 2019

描述:

输入一个大于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 相关文章推荐
json跨域调用python的方法详解
Jan 11 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
python爬虫实例之获取动漫截图
May 31 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Python 日期与时间转换的方法
Aug 01 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 #Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 #Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 #Python
python 公共方法汇总解析
Sep 16 #Python
python lambda表达式(匿名函数)写法解析
Sep 16 #Python
python 内置函数汇总详解
Sep 16 #Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 #Python
You might like
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
js同时按下两个方向键
2007/12/01 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python线性回归实战分析
2018/02/01 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Python面向对象编程基础实例分析
2020/01/17 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
解释一下抽象方法和抽象类
2016/08/27 面试题
聚美优品励志广告词
2014/03/14 职场文书
消防工作实施方案
2014/06/09 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript
Redis基本数据类型String常用操作命令
2022/06/01 Redis