標準ライブラリitertoolsを用いると要素の組み合わせが作成できる。
ライブラリitertoolsを使う際にはimportが必要。
import itertools
目次
1. productによる要素の積(デカルト積)の作成
2. permutationsによる順列の作成
3. combinationsによる重複しない組み合わせ作成
4. combinations_with_replacementによる重複を許容する組み合わせ作成
5. リファレンス
1. productによる要素の積(デカルト積)の作成
2. permutationsによる順列の作成
3. combinationsによる重複しない組み合わせ作成
4. combinations_with_replacementによる重複を許容する組み合わせ作成
5. リファレンス
1. productによる要素の積(デカルト積)の作成
productは集合と集合のデカルト積(直積)を求める。
productproductの戻り値はイテレータオブジェクトなので組み合わせパターンを求めるにはlistでリスト化する。
import itertools x = ['A','B','C'] y = [1, 2] list(itertools.product(x, y))
実行結果
[('A', 1), ('A', 2), ('B', 1), ('B', 2), ('C', 1), ('C', 2)]
イテレータオブジェクト自身とのデカルト積を求める場合は引数repeatを指定する。itertools.product(x, repeat=2)とした場合はitertools.product(x, x)と同じ。順序も区別したすべての組み合わせが求められる。
import itertools x = ['A','B','C'] list(itertools.product(x, repeat=2))
実行結果
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
repeat=3の場合。
import itertools x = ['A','B','C'] list(itertools.product(x, repeat=3))
実行結果
[('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'A', 'C'), ('A', 'B', 'A'), ('A', 'B', 'B'), ('A', 'B', 'C'), ('A', 'C', 'A'), ('A', 'C', 'B'), ('A', 'C', 'C'), ('B', 'A', 'A'), ('B', 'A', 'B'), ('B', 'A', 'C'), ('B', 'B', 'A'), ('B', 'B', 'B'), ('B', 'B', 'C'), ('B', 'C', 'A'), ('B', 'C', 'B'), ('B', 'C', 'C'), ('C', 'A', 'A'), ('C', 'A', 'B'), ('C', 'A', 'C'), ('C', 'B', 'A'), ('C', 'B', 'B'), ('C', 'B', 'C'), ('C', 'C', 'A'), ('C', 'C', 'B'), ('C', 'C', 'C')]
2. permutationsによる順列の作成
permutationsにより順列が求まる。順列を求める集合(リストなど)と選ぶ個数を指定する。選ぶ個数の指定が無ければ、集合の全ての要素で順列が作られる。
import itertools x = ['A','B','C'] list(itertools.permutations(x))
実行結果
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
要素数を指定すれば指定した要素数の順列が求まる。
要素数3のリストから2つの要素からなる順列を作る場合。
import itertools x = ['A','B','C'] list(itertools.permutations(x, 2))
実行結果
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
3. combinationsによる重複しない組み合わせ作成
combinationsにより集合から重複の無い組み合わせを作成する。要素数の指定が必要。
要素数3のリストから2つの要素の重複の無い組み合わせを作る場合。
import itertools x = ['A','B','C'] list(itertools.combinations(x, 2))
実行結果
[('A', 'B'), ('A', 'C'), ('B', 'C')]
4. combinations_with_replacementによる重複を許容する組み合わせ作成
combinations_with_replacementは同じ要素の重複を許容して、指定した要素数の組み合わせを作成する。順序は区別されない。
import itertools x = ['A','B','C'] list(itertools.combinations_with_replacement(x, 2))
実行結果
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
5. リファレンス
Python 標準ライブラリ > itertools --- 効率的なループ実行のためのイテレータ生成関数
使用バージョン:Python 3.7.0
0 件のコメント:
コメントを投稿