Python递归生成全排列序列实操

 更新时间:2022年04月15日 14:24:24   作者:浅若清风cyf   
这篇文章主要介绍了Python递归生成全排列序列实操,文章给予Python递归的相关资料展开对全排列序列的实现介绍,需要的小伙伴可以参考一下

前言

  • 在生成数据的过程中,我们有时候需要基于已有的数据生成排列组合的序列,对此,我们需要编写全排列算法生成序列,本文将分享本人编写的递归实现的全排列算法,支持对任意类型的数据进行生成全排列序列(不局限于数字)
  • 全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
  • 全排列数: f(n)=n!(定义0!=1)f(n)=n!(定义0!=1)
  • 递归实现方法:
    • 要求长度为n的序列的全排列序列:
    • ①依次选取原始序列一个元素作为全排列序列结果的第一个元素
    • ②递归调用全排列算法生成剩余n-1个元素的所有全排列序列
    • ③将①的元素分别与②的每一个序列组合,即可得到长度为n的序列所有全排列序列
    • ④递归结束条件:长度n=2的序列seq的有两个全排列序列为[seq[0],seq[1]]和 [seq[1],seq[0]]

代码

  • 输入:长度为n的序列,元素可以任何类型
  • 输出:输入序列的所有全排列序列
def full_sort(seq: list):
    '''
    author: 浅若清风cyf
    date: 2022/03/17
    全排列算法(递归)
    :param seq: 原始序列
    :return:
    '''
    results = []
    if len(seq) == 1:
        return seq
    elif len(seq) == 2:  # 递归返回终点
        return [[seq[0], seq[1]], [seq[1], seq[0]]]
    else:
        for i in seq:
            sub_seq = seq.copy()  # list类型为引用传递,此处需要使用copy()创建一个副本,避免修改原始list
            sub_seq.remove(i)
            tmp_result = full_sort(sub_seq)  # 获取子列表的全排列
            for t in tmp_result:
                results.append([i] + t)
        return results

测试结果

  • 测试样例1
if __name__ == '__main__':
    res = full_sort([1, 2, 3, 4])
    n = 0
    for i in res:
        print(i, end=' ')
        n += 1
        if n % 5 == 0:
            n = n % 5
            print('')

在这里插入图片描述

  • 测试样例2
    res = full_sort(['Apple', 'XiaoMi', 'HuaWei', 'OPPO'])
    n = 0
    for i in res:
        print(i, end=' ')
        n += 1
        if n % 5 == 0:
            n = n % 5
            print('')

在这里插入图片描述

到此这篇关于Python递归生成全排列序列实操的文章就介绍到这了,更多相关Python生成全排列序列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决python -m pip install --upgrade pip 升级不成功问题

    解决python -m pip install --upgrade pip 升级不成功问题

    这篇文章主要介绍了python -m pip install --upgrade pip 解决升级不成功问题,需要的朋友可以参考下
    2020-03-03
  • 用Python简陋模拟n阶魔方

    用Python简陋模拟n阶魔方

    这篇文章主要介绍了用Python简陋模拟n阶魔方,文中有非常详细的代码示例,对正在学习python的小伙伴呢有一定的帮助,需要的朋友可以参考下
    2021-04-04
  • TensorFlow人工智能学习数据合并分割统计示例详解

    TensorFlow人工智能学习数据合并分割统计示例详解

    这篇文章主要为大家介绍了TensorFlow人工智能学习数据合并分割及统计的示例详解有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python对列表进行排序的五种方法举例

    Python对列表进行排序的五种方法举例

    这篇文章主要介绍了Python对列表进行排序的五种方法,文中包括sort()方法、sorted()函数、lambda表达式、operator模块和numpy模块,帮助开发者根据具体需求选择合适的排序方式,需要的朋友可以参考下
    2024-11-11
  • 开源Web应用框架Django图文教程

    开源Web应用框架Django图文教程

    Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django是一个开放源代码的Web应用框架,由Python写成。下面我们来一步步学习下吧
    2017-03-03
  • python excel使用xlutils类库实现追加写功能的方法

    python excel使用xlutils类库实现追加写功能的方法

    今天小编就为大家带来一篇python excel使用xlutils类库实现追加写功能的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • scrapy爬虫部署服务器的方法步骤

    scrapy爬虫部署服务器的方法步骤

    本文主要介绍了scrapy爬虫部署服务器的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 解决python3 urllib中urlopen报错的问题

    解决python3 urllib中urlopen报错的问题

    这篇文章主要介绍了关于解决python3 urllib中urlopen报错问题的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • python实现json文件的增删改操作方法

    python实现json文件的增删改操作方法

    这篇文章主要介绍了python实现json文件的增删改操作,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Python多线程爬虫实战_爬取糗事百科段子的实例

    Python多线程爬虫实战_爬取糗事百科段子的实例

    下面小编就为大家分享一篇Python多线程爬虫实战_爬取糗事百科段子的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论