排列组合函数
itertools模块下提供了一些用于生成排列组合的工具函数。
- itertools.product(p, q, … [repeat=1]):用序列p、q、…序列中的元素进行排列(元素会重复)。返回p、q中的元素的笛卡尔积的元组
- itertools.product(sequence,repeat=n) #从sequence中拿n次每次1个数做排列,有放回的拿出, repeat=n与sequence的长度无关。
import itertools
for e in itertools.product('AB', 'CD'):
print(''.join(e), end=', ')
print()
for e in itertools.product('AB', 'CD',repeat=2):
print(''.join(e), end=', ')
print()
for i in itertools.product([1,2],repeat= 3):
print(i)
输出
AC, AD, BC, BD,
ACAC, ACAD, ACBC, ACBD, ADAC, ADAD, ADBC, ADBD, BCAC, BCAD, BCBC, BCBD, BDAC, BDAD, BDBC, BDBD,
(1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 2, 2)
(2, 1, 1)
(2, 1, 2)
(2, 2, 1)
(2, 2, 2)
- itertools.permutations(sequence,n) # 从sequence中一次性拿出n个数做排列,n 只能小于等于sequence的长度 否则没有输出。
- 若n == len(sequence),n 可以省略
import itertools
for e in itertools.permutations('ABCD', 2):
print(''.join(e), end=", ")
输出
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
- itertools.combinations(sequence, n ) # 从sequence中一次性拿出n个数做组合,当n大于sequence的长度自然没有数据。
import itertools
for e in itertools.combinations('ABCD', 2):
print(''.join(e), end=', ')
输出
AB, AC, AD, BC, BD, CD,
- itertools.combinations_with_replacement(sequence, n ) # 从sequence中拿n次每次1个数做组合,有放回的拿出, repeat与sequence的长度无关。
import itertools
for i in itertools.combinations_with_replacement([1,2],4):
print(i)
输出
(1, 1, 1, 1)
(1, 1, 1, 2)
(1, 1, 2, 2)
(1, 2, 2, 2)
(2, 2, 2, 2)