====== Python モジュール: itertools ======
===== 概要 =====
* 階乗、順列や組み合わせ、直積を簡単に扱えるモジュール
===== 使い方 =====
==== モジュールの読み込み ====
import itertools
==== 順列 ====
* 階乗のイテレータ (list でリストに変換できる) を作成する\\
VAR = list(itertools.permutations(SEQ))
* ''VAR'': 階乗のパターンを格納する変数
* ''SEQ'': 階乗で使われる数のリスト (リストの長さが階乗 $N!$ の $N$ になる)
* パターン数を求める場合は、''list'' の長さを調べると良い。
* 例: 5! のパターン数\\
variable = len(list(itertools.permutations(range(5)))) # 120
* 例: 3! (ただし、10, 11, 12 のパターンを作成)\\
variable = list(itertools.permutations([10,11,12]))
# [(10, 11, 12), (10, 12, 11), (11, 10, 12), (11, 12, 10), (12, 10, 11), (12, 11, 10)]
==== 順列 ====
* 順列のイテレータ (list でリストに変換できる) を作成する\\
VAR = list(itertools.permutations(SEQ, R))
* ''VAR'': 順列のパターンを格納する変数
* ''SEQ'': リストの長さが ${}_n \mathrm{P}_r$ の ${}_n$ になる。
* ''R'': ${}_n \mathrm{P}_r$ の ${}_r$
* 例: ${}_5 \mathrm{P}_3$\\
variable = len(list(itertools.permutations(range(5), 3))) # 60
==== 組み合わせ ====
* 組み合わせ (順列の順序なし) のイテレータ (list でリストに変換できる) を作成する\\
VAR = list(itertools.combinations(SEQ, R))
* ''VAR'': 組み合わせのパターンを格納する変数
* ''SEQ'': リストの長さが ${}_n \mathrm{C}_r$ の ${}_n$ になる。
* ''R'': ${}_n \mathrm{C}_r$ の ${}_r$
* 例: ${}_5 \mathrm{C}_3$\\
variable = len(list(itertools.combinations(range(5), 3))) # 10
==== 直積 ====
* 2 つの集合体の組み合わせである直積 ($A \times B$) のイテレーターを作成する\\
VAR = list(itertools.product(SEQ_A, SEQ_B))
* ''VAR'': 直積のパターンを格納する変数
* ''SEQ_A'': 集合 A
* ''SEQ_A'': 集合 B
* 返り値は、組み合わせパターンの 2 変数
* 例:\\
list_a = [1,2,3]
list_b = [4,5]
variable = len(list(itertools.product(list_a, list_b)))
# [(1, 4), (1, 5), (2, 4), (2, 5), (3, 4), (3, 5)]
for i,j in itertools.product(list_a, list_b):
print(i, j)
# 1 4
# 1 5
# 2 4
# 2 5
# 3 4
# 3 5
===== 参考サイト =====
* [[https://qiita.com/junkls/items/10384950963056cc8e08 | itertoolsによる順列、組み合わせ、直積のお勉強 - Qiita]]
{{tag>プログラミング}}