利用itertools進行排列組合

求兩個序列的笛卡爾積,或者在一個序列上進行排列組合,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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章