您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:15:06 python 字数 6045 阅读 328 来源 www.jb51.cc/python

求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用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) 

结果如下:

[(1,4),(1,4,3),2),(2,1,1),(3,(4,1)] 
元素不允许重复出现排列总数为: 24 
------------------------------------- 
[(1,4)] 
元素可以重复出现排列总数为: 256 
------------------------------------- 
[(),),4)] 
元素不允许重复出现组合总数为: 16 
------------------------------------- 
['','1','2','3','4','11','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44','111','112','113','114','121','122','123','124','131','132','133','134','141','142','143','144','211','212','213','214','221','222','223','224','231','232','233','234','241','242','243','244','311','312','313','314','321','322','323','324','331','332','333','334','341','342','343','344','411','412','413','414','421','422','423','424','431','432','433','434','441','442','443','444','1111','1112','1113','1114','1121','1122','1123','1124','1131','1132','1133','1134','1141','1142','1143','1144','1211','1212','1213','1214','1221','1222','1223','1224','1231','1232','1233','1234','1241','1242','1243','1244','1311','1312','1313','1314','1321','1322','1323','1324','1331','1332','1333','1334','1341','1342','1343','1344','1411','1412','1413','1414','1421','1422','1423','1424','1431','1432','1433','1434','1441','1442','1443','1444','2111','2112','2113','2114','2121','2122','2123','2124','2131','2132','2133','2134','2141','2142','2143','2144','2211','2212','2213','2214','2221','2222','2223','2224','2231','2232','2233','2234','2241','2242','2243','2244','2311','2312','2313','2314','2321','2322','2323','2324','2331','2332','2333','2334','2341','2342','2343','2344','2411','2412','2413','2414','2421','2422','2423','2424','2431','2432','2433','2434','2441','2442','2443','2444','3111','3112','3113','3114','3121','3122','3123','3124','3131','3132','3133','3134','3141','3142','3143','3144','3211','3212','3213','3214','3221','3222','3223','3224','3231','3232','3233','3234','3241','3242','3243','3244','3311','3312','3313','3314','3321','3322','3323','3324','3331','3332','3333','3334','3341','3342','3343','3344','3411','3412','3413','3414','3421','3422','3423','3424','3431','3432','3433','3434','3441','3442','3443','3444','4111','4112','4113','4114','4121','4122','4123','4124','4131','4132','4133','4134','4141','4142','4143','4144','4211','4212','4213','4214','4221','4222','4223','4224','4231','4232','4233','4234','4241','4242','4243','4244','4311','4312','4313','4314','4321','4322','4323','4324','4331','4332','4333','4334','4341','4342','4343','4344','4411','4412','4413','4414','4421','4422','4423','4424','4431','4432','4433','4434','4441','4442','4443','4444'] 
元素可以重复出现组合总数为: 341 
[Finished in 0.4s] 

总结

以上所述是小编给大家介绍的python实现求解列表中元素的排列和组合问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持

总结

以上是编程之家为你收集整理的python实现求解列表中元素的排列和组合问题全部内容,希望文章能够帮你解决python实现求解列表中元素的排列和组合问题所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶