• 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

    你有什么心态,就有什么样的人生。管不好自己的心态,注定你就是个弱者。
  • 相关阅读:
    78. Subsets java solutions
    77. Combinations java solutions
    236. Lowest Common Ancestor of a Binary Tree java solutions
    86. Partition List java solutions
    39. Combination Sum java solutions
    129. Sum Root to Leaf Numbers java solutions
    杭电1004
    杭电1003
    杭电1002
    杭电1001
  • 原文地址:https://www.cnblogs.com/LQZ888/p/12705915.html
Copyright © 2020-2023  润新知