pythonでの組み合わせ(itertools)
pythonでは標準モジュールmathで階乗の計算が可能になっている。
それを利用して、SciPyの関数にも順列や組み合わせを求める方法がある。
今回はitertools(イテレータ)モジュールを利用して配列から順列や組み合わせを生成、列挙出来るようにする。
組み合わせでは並び順を考慮しないので注意!
例)「順列」はABをBAを区別するが「組み合わせ」は区別しない
組み合わせcombinations
リスト(配列)などからすべての組み合わせを生成して列挙する
例)
code:python
import itertools
list(itertools.combinations(range(5), 2))
'''以下実行結果
[(0, 1), (0, 2), (0, 3), (0, 4), (1, 2),
(1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
'''
第一引数にイテラブル(リストや集合set型)、第二引数に選択する個数を渡すと、その組み合わせのイテレータを返す。
順列permutations
リスト(配列)などから順列を生成して列挙する
例)
code:python
import itertools
'''
B=itertools.permutations(A,2)
for i in B:
print(i)
'''
print(list(itertools.permutations(range(5), 2)))
'''以下実行結果
(0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 2), (1, 3), (1, 4), (2, 0), (2, 1), (2, 3), (2, 4), (3, 0), (3, 1), (3, 2), (3, 4), (4, 0), (4, 1), (4, 2), (4, 3) '''
第一引数にイテラブル(リストや集合set型)、第二引数に選択する個数を渡すと、その順列のイテレータを返す。
また、すべてを列挙する場合は上記のようにfor文で回す必要がある
他にも「直積 product」等がある
詳しくは以下リンクを参照
参考サイト