求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python的内置模块就可以完成这个工作了,今天就使用python的itertools模块来完成这个工作,一共解决四个问题:
1.生成排列,列表中元素不允许重复出现
2.生成排列,列表中元素可以重复出现
3.生成组合,不限元素个数,列表中元素不允许重复出现
4.生成组合,不限元素个数,列表中元素可以重复出现
因为大家都有排列组合的知识这里就不累赘了,问题很简单,下面看具体的实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#!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
2
3
4
5
6
7
8
9
10
11
12
|
[( 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
[Finished in 0.4s ]
|
总结
以上所述是小编给大家介绍的python实现求解列表中元素的排列和组合问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/u010483897/article/details/79564703