python实现求解列表中元素的排列和组合问题
求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python的内置模块就可以完成这个工作了,今天就使用python的itertools模块来完成这个工作,一共解决四个问题:
1.生成排列,列表中元素不允许重复出现
2.生成排列,列表中元素可以重复出现
3.生成组合,不限元素个数,列表中元素不允许重复出现
4.生成组合,不限元素个数,列表中元素可以重复出现
因为大家都有排列组合的知识这里就不累赘了,问题很简单,下面看具体的实现:
#!usr/bin/envpython #encoding:utf-8 ''''' __Author__:沂水寒城 功能:求解列表中元素的排列和组合问题 ''' fromitertoolsimportproduct fromitertoolsimportcombinations importitertools deftest_func1(num_list): ''''' 生成排列 列表中元素不允许重复出现 排列数计算为:n!,其中n为num_list列表中元素个数 ''' tmp_list=itertools.permutations(num_list) res_list=[] foroneintmp_list: res_list.append(one) printres_list print'元素不允许重复出现排列总数为:',len(res_list) deftest_func11(num_list): ''''' 生成排列 列表中元素可以重复出现 排列总数计算为:(n*n*n...*n),一共n个n相乘 ''' num=len(num_list) res_list=list(product(num_list,repeat=num)) printres_list print'元素可以重复出现排列总数为:',len(res_list) deftest_func2(num_list): ''''' 生成组合,不限元素个数 列表中元素不允许重复出现 组合数计算为:2^n,其中n为num_list列表中元素个数 ''' res_list=[] foriinrange(len(num_list)+1): res_list+=list(combinations(num_list,i)) printres_list print'元素不允许重复出现组合总数为:',len(res_list) deftest_func22(num_list): ''''' 生成组合,不限元素个数 列表中元素可以重复出现 ''' res_list=[] num_list1=[str(i)foriinnum_list] foriinrange(0,len(num_list)+1): res_list+=[''.join(x)forxinitertools.product(*[num_list1]*i)] printres_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,2,3,4),(1,2,4,3),(1,3,2,4),(1,3,4,2),(1,4,2,3),(1,4,3,2),(2,1,3,4),(2,1,4,3),(2,3,1,4),(2,3,4,1),(2,4,1,3),(2,4,3,1),(3,1,2,4),(3,1,4,2),(3,2,1,4),(3,2,4,1),(3,4,1,2),(3,4,2,1),(4,1,2,3),(4,1,3,2),(4,2,1,3),(4,2,3,1),(4,3,1,2),(4,3,2,1)] 元素不允许重复出现排列总数为:24 ------------------------------------- [(1,1,1,1),(1,1,1,2),(1,1,1,3),(1,1,1,4),(1,1,2,1),(1,1,2,2),(1,1,2,3),(1,1,2,4),(1,1,3,1),(1,1,3,2),(1,1,3,3),(1,1,3,4),(1,1,4,1),(1,1,4,2),(1,1,4,3),(1,1,4,4),(1,2,1,1),(1,2,1,2),(1,2,1,3),(1,2,1,4),(1,2,2,1),(1,2,2,2),(1,2,2,3),(1,2,2,4),(1,2,3,1),(1,2,3,2),(1,2,3,3),(1,2,3,4),(1,2,4,1),(1,2,4,2),(1,2,4,3),(1,2,4,4),(1,3,1,1),(1,3,1,2),(1,3,1,3),(1,3,1,4),(1,3,2,1),(1,3,2,2),(1,3,2,3),(1,3,2,4),(1,3,3,1),(1,3,3,2),(1,3,3,3),(1,3,3,4),(1,3,4,1),(1,3,4,2),(1,3,4,3),(1,3,4,4),(1,4,1,1),(1,4,1,2),(1,4,1,3),(1,4,1,4),(1,4,2,1),(1,4,2,2),(1,4,2,3),(1,4,2,4),(1,4,3,1),(1,4,3,2),(1,4,3,3),(1,4,3,4),(1,4,4,1),(1,4,4,2),(1,4,4,3),(1,4,4,4),(2,1,1,1),(2,1,1,2),(2,1,1,3),(2,1,1,4),(2,1,2,1),(2,1,2,2),(2,1,2,3),(2,1,2,4),(2,1,3,1),(2,1,3,2),(2,1,3,3),(2,1,3,4),(2,1,4,1),(2,1,4,2),(2,1,4,3),(2,1,4,4),(2,2,1,1),(2,2,1,2),(2,2,1,3),(2,2,1,4),(2,2,2,1),(2,2,2,2),(2,2,2,3),(2,2,2,4),(2,2,3,1),(2,2,3,2),(2,2,3,3),(2,2,3,4),(2,2,4,1),(2,2,4,2),(2,2,4,3),(2,2,4,4),(2,3,1,1),(2,3,1,2),(2,3,1,3),(2,3,1,4),(2,3,2,1),(2,3,2,2),(2,3,2,3),(2,3,2,4),(2,3,3,1),(2,3,3,2),(2,3,3,3),(2,3,3,4),(2,3,4,1),(2,3,4,2),(2,3,4,3),(2,3,4,4),(2,4,1,1),(2,4,1,2),(2,4,1,3),(2,4,1,4),(2,4,2,1),(2,4,2,2),(2,4,2,3),(2,4,2,4),(2,4,3,1),(2,4,3,2),(2,4,3,3),(2,4,3,4),(2,4,4,1),(2,4,4,2),(2,4,4,3),(2,4,4,4),(3,1,1,1),(3,1,1,2),(3,1,1,3),(3,1,1,4),(3,1,2,1),(3,1,2,2),(3,1,2,3),(3,1,2,4),(3,1,3,1),(3,1,3,2),(3,1,3,3),(3,1,3,4),(3,1,4,1),(3,1,4,2),(3,1,4,3),(3,1,4,4),(3,2,1,1),(3,2,1,2),(3,2,1,3),(3,2,1,4),(3,2,2,1),(3,2,2,2),(3,2,2,3),(3,2,2,4),(3,2,3,1),(3,2,3,2),(3,2,3,3),(3,2,3,4),(3,2,4,1),(3,2,4,2),(3,2,4,3),(3,2,4,4),(3,3,1,1),(3,3,1,2),(3,3,1,3),(3,3,1,4),(3,3,2,1),(3,3,2,2),(3,3,2,3),(3,3,2,4),(3,3,3,1),(3,3,3,2),(3,3,3,3),(3,3,3,4),(3,3,4,1),(3,3,4,2),(3,3,4,3),(3,3,4,4),(3,4,1,1),(3,4,1,2),(3,4,1,3),(3,4,1,4),(3,4,2,1),(3,4,2,2),(3,4,2,3),(3,4,2,4),(3,4,3,1),(3,4,3,2),(3,4,3,3),(3,4,3,4),(3,4,4,1),(3,4,4,2),(3,4,4,3),(3,4,4,4),(4,1,1,1),(4,1,1,2),(4,1,1,3),(4,1,1,4),(4,1,2,1),(4,1,2,2),(4,1,2,3),(4,1,2,4),(4,1,3,1),(4,1,3,2),(4,1,3,3),(4,1,3,4),(4,1,4,1),(4,1,4,2),(4,1,4,3),(4,1,4,4),(4,2,1,1),(4,2,1,2),(4,2,1,3),(4,2,1,4),(4,2,2,1),(4,2,2,2),(4,2,2,3),(4,2,2,4),(4,2,3,1),(4,2,3,2),(4,2,3,3),(4,2,3,4),(4,2,4,1),(4,2,4,2),(4,2,4,3),(4,2,4,4),(4,3,1,1),(4,3,1,2),(4,3,1,3),(4,3,1,4),(4,3,2,1),(4,3,2,2),(4,3,2,3),(4,3,2,4),(4,3,3,1),(4,3,3,2),(4,3,3,3),(4,3,3,4),(4,3,4,1),(4,3,4,2),(4,3,4,3),(4,3,4,4),(4,4,1,1),(4,4,1,2),(4,4,1,3),(4,4,1,4),(4,4,2,1),(4,4,2,2),(4,4,2,3),(4,4,2,4),(4,4,3,1),(4,4,3,2),(4,4,3,3),(4,4,3,4),(4,4,4,1),(4,4,4,2),(4,4,4,3),(4,4,4,4)] 元素可以重复出现排列总数为:256 ------------------------------------- [(),(1,),(2,),(3,),(4,),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4),(1,2,3),(1,2,4),(1,3,4),(2,3,4),(1,2,3,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 [Finishedin0.4s]
总结
以上所述是小编给大家介绍的python实现求解列表中元素的排列和组合问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!