加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Python达成全排列算法

发布时间:2021-11-12 11:27:20 所属栏目:教程 来源:互联网
导读:所谓全排列,就是给定数组,将所有的可能排列组合都枚举出来,n个元素共有n!种排列组合。 举例,对于[1, 2, 3],全排列结果为:123,132,213,231,312,321,共有3!=6种。 很直觉的思路就是从数组中依次挑选一个元素作为第1元素,固定第1元素之后,再将剩下的n-

所谓全排列,就是给定数组,将所有的可能排列组合都枚举出来,n个元素共有n!种排列组合。
 
举例,对于['1', '2', '3'],全排列结果为:123,132,213,231,312,321,共有3!=6种。
 
很直觉的思路就是从数组中依次挑选一个元素作为第1元素,固定第1元素之后,再将剩下的n-1个元素做全排列。
 
很显然这是递归的思路,还需要确定跳出条件,这里是只剩下1个元素时,自然就到头了。
 
根据这个思路,代码如下:
 
from __future__ import print_function
def perm(elem_list, s=''):
    # 类型检查
    if type(elem_list) != type([]):
        return
    # 参数合法性检查
    if len(elem_list) == 0:
        return
    # 跳出条件
    if len(elem_list) == 1:
        # 打印当前结果
        print(s+elem_list[0])
        return
    # 依次挑选一个元素作为第1元素
    for i,e in enumerate(elem_list):
        # 递归调用自身,同时传入当前的前缀字符串
        perm(elem_list[:i] + elem_list[i+1:], s+e)
# 测试用例
perm(['1', '2', '3'])
上述代码的运行结果如下:
 
123
132
213
231
312
321

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读