itertools--可能なすべての組合せまたは配列を反復します.

1884 ワード

質問:一連の要素のすべての可能な組合せまたは配列を反復したい
1、itertools.permutations()は、要素の集合を受け入れ、その要素を可能な限り並べ替え、メタグループシーケンスとして返します.
import itertools

items = ['a', 'b', 'c']
for p in itertools.permutations(items):
    print(p)
    
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

for p in itertools.permutations(items, 2):  #              
    print(p)
    
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')

2、itertools.combinations()は、入力シーケンス内のすべての要素のすべての組合せ形式を生成することができる.combinations()にとって、要素間の実際の順序は考慮されず、組合せ('a','b')と('b','a')は同じ組合せ形式とされる.
for p in itertools.combinations(items, 3):
    print(p)
    
('a', 'b', 'c')

for p in itertools.combinations(items, 2):
    print(p)
    
('a', 'b')
('a', 'c')
('b', 'c')

3、組み合わせが生成されると、選択された要素は可能な候補要素から除去される.itertools.combinations_with_replacement()関数はこの制限を解放し、同じ要素を複数回選択できます.
for c in itertools.combinations_with_replacement(items, 3):
    print(c)
    
('a', 'a', 'a')
('a', 'a', 'b')
('a', 'a', 'c')
('a', 'b', 'b')
('a', 'b', 'c')
('a', 'c', 'c')
('b', 'b', 'b')
('b', 'b', 'c')
('b', 'c', 'c')
('c', 'c', 'c')

まとめ:
複雑な反復問題に直面する場合は、itertoolsモジュールを常に見ておく必要があります.問題が一般的であれば、既存の解決策がある可能性があります.