求兩個序列的笛卡爾積,或者在一個序列上進行排列組合,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')