导读
排列、组合在读书时学过吧,让我们看看强大的Python来为我们实现排列组合。
itertools模块下提供了一些用于生成排列组合的工具函数。
如下程序示范了上面4个函数的用法。
import itertools as it
# 使用两个序列进行排列组合
for e in it.product('AB', 'CD'):
print(''.join(e), end=', ') # AC, AD, BC, BD,
print('\n---------')
# 使用一个序列、重复2次进行全排列
for e in it.product('AB', repeat=2):
print(''.join(e), end=', ') # AA, AB, BA, BB,
print('\n---------')
# 从序列中取2个元素进行排列
for e in it.permutations('ABCD', 2):
print(''.join(e), end=', ') # AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
print('\n---------')
# 从序列中取2个元素进行组合、元素不允许重复
for e in it.combinations('ABCD', 2):
print(''.join(e), end=', ') # AB, AC, AD, BC, BD, CD,
print('\n---------')
# 从序列中取2个元素进行组合、元素允许重复
for e in it.combinations_with_replacement('ABCD', 2):
print(''.join(e), end=', ') # AA, AB, AC, AD, BB, BC, BD, CC, CD, DD,
上面程序用到了一个字符串的join()方法,该方法用于将元组的所有元素都连接成一个字符串。
运行上面程序,看到如下输出。
AC, AD, BC, BD,
---------
AA, AB, BA, BB,
---------
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
---------
AB, AC, AD, BC, BD, CD,
---------
AA, AB, AC, AD, BB, BC, BD, CC, CD, DD,
关于product()函数和permutations()函数,还可参考如下程序
import itertools as it
# 从4个字符中取2个,组成所有排列(可以重复),一共4*4个
for e in it.product('ABCD', repeat=2):
print(''.join(e), end=", ")
print('\n----------')
# 先用AB与CD排列,然后用排列的结果执行长度为2的排列,一共16个
for e in it.product('AB', 'CD', repeat=2):
print(''.join(e), end=", ")
print('\n----------')
# 从4个字符中取2个,组成所有全排列(不允许重复),一共4×3个
for e in it.permutations('ABCD', 2):
print(''.join(e), end=", ")
print('\n----------')
# 从4个字符的全排列,一共4×3×2×1个
for e in it.permutations('ABCD'):
print(''.join(e), end=", ")
运行结果如下:
AA, AB, AC, AD, BA, BB, BC, BD, CA, CB, CC, CD, DA, DB, DC, DD,
----------
ACAC, ACAD, ACBC, ACBD, ADAC, ADAD, ADBC, ADBD, BCAC, BCAD, BCBC, BCBD, BDAC, BDAD, BDBC, BDBD,
----------
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
----------
ABCD, ABDC, ACBD, ACDB, ADBC, ADCB, BACD, BADC, BCAD, BCDA, BDAC, BDCA, CABD, CADB, CBAD, CBDA, CDAB, CDBA, DABC, DACB,DBAC, DBCA, DCAB, DCBA,