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,全排列
0
投稿

猜你喜欢

  • SQL Server中使用Linkserver连接Oracle的方法

    2024-01-23 07:35:00
  • python matplotlib绘图实现删除重复冗余图例的操作

    2023-11-02 22:36:44
  • 在python带权重的列表中随机取值的方法

    2022-05-09 01:44:25
  • 深入剖析Go语言编程中switch语句的使用

    2024-02-19 16:50:45
  • 如何真正的了解python装饰器

    2023-03-16 09:08:23
  • python处理图片之PIL模块简单使用方法

    2023-06-25 21:42:05
  • Python金融数据可视化汇总

    2023-04-12 21:27:41
  • python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享

    2023-04-29 08:57:32
  • SQL Server TEXT、NTEXT字段拆分的问题

    2008-10-26 12:28:00
  • Python+selenium实现趣头条的视频自动上传与发布

    2022-03-23 10:27:43
  • python代码检查工具pylint 让你的python更规范

    2021-07-03 12:06:38
  • Prometheus 监控MySQL使用grafana展示

    2024-01-21 07:18:53
  • wxPython实现整点报时

    2023-06-11 05:25:39
  • VUE写一个简单的表格实例

    2023-07-02 16:56:30
  • Python实现简易版的Web服务器(推荐)

    2021-04-21 04:41:15
  • Python+Kepler.gl实现时间轮播地图过程解析

    2021-03-27 00:20:52
  • 如何使用PHP中的字符串函数

    2024-05-11 10:01:52
  • python subprocess pipe 实时输出日志的操作

    2022-10-07 00:39:51
  • python 3利用BeautifulSoup抓取div标签的方法示例

    2023-09-17 02:57:48
  • 如何安装MySQL Community Server 5.6.39

    2024-01-26 23:07:29
  • asp之家 网络编程 m.aspxhome.com