こんにちは!
皆さんは、順列や組み合わせを求めようと思ったことはありませんか?
itertoolsを使えば簡単に求めることができますよ。
今回の記事では、itertoolsを使った以下の方法について紹介します。
- 順列を全通り表示する方法
- 順列が何通りか求める方法
- 組み合わせを全通り表示する方法
- 組み合わせが何通りか求める方法
投資、就活、英語についての記事を書いています。
気になる方は是非見てみてください!
itertools
itertoolsとは
itertoolsとは、効率的なループ実行のためのイテレータ生成関数です。
このモジュールは イテレータ を構築する部品を実装しています。プログラム言語 APL, Haskell, SML からア…
今回の記事では、順列・組み合わせを求める際に使用します。
itertoolsのインストール方法
itertoolsはPythonの標準ライブラリなのでインストールの必要はありません。
順列
順列とは、異なるn個の中から k 個を順番をつけて並べる場合の並べ方です。
総数はnPk で表され、以下の公式から求められます。
順列を全通り表示
順列を全通り表示するには、「permutations()」を使用します。
ここで、nは配列の要素数になります。
以下のプログラムは、n=5、k=2の場合の順列を全通り表示するプログラムです。
import itertools
per = [1, 2, 3, 4, 5]
per_list = list(itertools.permutations(per, 2))
print(per_list)
解説
実行結果
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4)]
順列が何通りかを求める
nPk の値を求めましょう。
以下のプログラムは、n=5、k=2の場合のnPk の値を求めるプログラムです。
import itertools
per = [1, 2, 3, 4, 5]
per_list = list(itertools.permutations(per, 2))
print(len(per_list))
解説
実行結果
20
階乗について
階乗とは、5! = 5×4×3×2×1 のような計算のことですね。
階乗は、順列のn=kの場合と同じです。そのため階乗を計算することもできます。
階乗の組み合わせを表示するには、permutationsの第二引数を入力しなければ良いです。
以下のプログラムは、3!の値を求めるプログラムです。
import itertools
per = [1, 2, 3]
per_list = list(itertools.permutations(per))
print(len(per_list))
実行結果
6
組み合わせ
組み合わせとは異なるn個の中から k 個を順番を考えずに選ぶ場合の選び方です。
総数はnCk で表され、以下の公式から求められます。
組み合わせを全通り表示
組み合わせを全通り表示するには、「combinations()」を使用します。
ここで、nは配列の要素数になります。
以下のプログラムは、n=5、k=2の場合の組み合わせを全通り表示するプログラムです。
import itertools
com = [1, 2, 3, 4, 5]
com_list = list(itertools.combinations(com, 2))
print(com_list)
解説
実行結果
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
組み合わせが何通りかを求める
nCk の値を求めましょう。
以下のプログラムは、n=5、k=2の場合のnCk の値を求めるプログラムです。
import itertools
com = [1, 2, 3, 4, 5]
com_list = list(itertools.combinations(com, 2))
print(len(com_list))
解説
実行結果
10
まとめ
今回の記事では、itertoolsを使った以下の方法について紹介しました。
- 順列を全通り表示する方法
→permutations()を使用 - 順列が何通りか求める方法
→len()を使用 - 組み合わせを全通り表示する方法
→combinations()を使用 - 組み合わせが何通りか求める方法
→len()を使用
リストの要素全通りの組み合わせでfor文を回したい時などはよくあるので、しっかりと覚えておきましょう!