• 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

    你有什么心态,就有什么样的人生。管不好自己的心态,注定你就是个弱者。
  • 相关阅读:
    解决IE9下JQuery的ajax失效的问题
    npm更新到最新版本的方法
    animate.css配合wow.min.js实现各种页面滚动效果
    Bootstrap导航点击菜单跳转与点击缩放菜单折叠按钮缓冲效果插件jquery.singlePageNav.min.js
    对json对象进行截取并按照某关键字进行排序
    巧用 position:absolute
    EasyUI Datagrid 分页
    Cssreset
    杂记
    for循环遍历json(附习题及答案)
  • 原文地址:https://www.cnblogs.com/LQZ888/p/12705915.html
Copyright © 2020-2023  润新知