• python实现求解列表中元素的排列和组合


    求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python的内置模块就可以完成这个工作了,今天就使用python的itertools模块来完成这个工作,一共解决四个问题:

    1.生成排列,列表中元素不允许重复出现

    2.生成排列,列表中元素可以重复出现

    3.生成组合,不限元素个数,列表中元素不允许重复出现

    4.生成组合,不限元素个数,列表中元素可以重复出现

    因为大家都有排列组合的知识这里就不累赘了,问题很简单,下面看具体的实现:

    #!usr/bin/env python 
    #encoding:utf-8 
    ''''' 
    __Author__:沂水寒城 
    功能:求解列表中元素的排列和组合问题 
    '''
    from itertools import product 
    from itertools import combinations 
    import itertools 
    def test_func1(num_list): 
     ''''' 
     生成排列 
     列表中元素不允许重复出现 
     排列数计算为:n!,其中n为num_list列表中元素个数 
     '''
     tmp_list = itertools.permutations(num_list) 
     res_list=[] 
     for one in tmp_list: 
      res_list.append(one) 
     print res_list 
     print '元素不允许重复出现排列总数为:', len(res_list) 
    def test_func11(num_list): 
     ''''' 
     生成排列 
     列表中元素可以重复出现 
     排列总数计算为:(n*n*n...*n),一共n个n相乘 
     '''
     num=len(num_list) 
     res_list=list(product(num_list,repeat=num)) 
     print res_list 
     print '元素可以重复出现排列总数为:', len(res_list) 
    def test_func2(num_list): 
     ''''' 
     生成组合,不限元素个数 
     列表中元素不允许重复出现 
     组合数计算为:2^n,其中n为num_list列表中元素个数 
     '''
     res_list=[] 
     for i in range(len(num_list)+1): 
      res_list+=list(combinations(num_list, i)) 
     print res_list 
     print '元素不允许重复出现组合总数为:', len(res_list) 
    def test_func22(num_list): 
     ''''' 
     生成组合,不限元素个数 
     列表中元素可以重复出现 
     '''
     res_list=[] 
     num_list1=[str(i) for i in num_list] 
     for i in range(0,len(num_list)+1): 
      res_list+=[''.join(x) for x in itertools.product(*[num_list1] * i)] 
     print res_list 
     print '元素可以重复出现组合总数为:', len(res_list) 
    if __name__ == '__main__': 
     num_list=[1,2,3,4] 
     test_func1(num_list) 
     print '-------------------------------------'
     test_func11(num_list) 
     print '-------------------------------------'
     test_func2(num_list) 
     print '-------------------------------------'
     test_func22(num_list)


    ————————————————
    版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/chengxun03/article/details/105498145

    你有什么心态,就有什么样的人生。管不好自己的心态,注定你就是个弱者。
  • 相关阅读:
    java创建节点和单向链表
    Java循环链表实现约瑟夫环(搬运)
    java语言建立顺序表
    顺序表删除重复值的高效算法。
    2016.1.29
    IO流学习笔记
    oracle 计算两个时间之间的月份差,相差几个星期,相差多少天
    java中如何计算两个时间段的月份差
    怎样在数据库中插入大量数据
    oracle 定义数据完整性
  • 原文地址:https://www.cnblogs.com/LQZ888/p/12705915.html
Copyright © 2020-2023  润新知