求两个序列的笛卡尔积,或者在一个序列上进行排列组合,python标准库itertools提供了生成的功能,可以方便解决这个问题。
首先导入库
import itertools
product 组合
for i in itertools.product('ABCD', repeat=2):
print(i)
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')
permutations 排列
for i in itertools.permutations('ABCD', 2):
print(i)
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C')
combinations 组合(无重复)
for i in itertools.combinations('ABCD', 2):
print(i)
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'C') ('B', 'D') ('C', 'D')
combinations_with_replacement(有重复)
for i in itertools.combinations_with_replacement('ABCD', 2):
print(i)
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'C') ('C', 'D') ('D', 'D')
repeat参数控制生成的序列元素个数,比如将combinations中的参数换成3。
for i in itertools.combinations('ABCD', 3):
print(i)
('A', 'B', 'C')
('A', 'B', 'D')
('A', 'C', 'D')
('B', 'C', 'D')
上述函数生成的对象都支持next()方法,以itertools.combinations举例。
a =itertools.combinations('ABCD', 3)
next(a)
('A', 'B', 'C')
next(a)
('A', 'B', 'D')