【Python】順列・組み合わせを求めよう!

  • 2020年4月27日
  • 2020年4月27日
  • Python

こんにちは!

皆さんは、順列や組み合わせを求めようと思ったことはありませんか?

itertoolsを使えば簡単に求めることができますよ。

今回の記事では、itertoolsを使った以下の方法について紹介します。

  • 順列を全通り表示する方法
  • 順列が何通りか求める方法
  • 組み合わせを全通り表示する方法
  • 組み合わせが何通りか求める方法

itertools

itertoolsとは

itertoolsとは、効率的なループ実行のためのイテレータ生成関数です。

今回の記事では、順列・組み合わせを求める際に使用します。

itertoolsのインストール方法

itertoolsはPythonの標準ライブラリなのでインストールの必要はありません

順列

順列とは、異なるn個の中から k 個を順番をつけて並べる場合の並べ方です。

総数はP で表され、以下の公式から求められます。

順列を全通り表示

順列を全通り表示するには、「permutations()」を使用します。

permutations(配列, k)

ここで、nは配列の要素数になります。

以下のプログラムは、n=5、k=2の場合の順列を全通り表示するプログラムです。

import itertools

per = [1, 2, 3, 4, 5]
per_list = list(itertools.permutations(per, 2))
print(per_list)

解説

per_list = list(itertools.permutations(per, 2))
この部分で、順列の全通りのリストを得ることができます。

実行結果

[(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)]

順列が何通りかを求める

P の値を求めましょう。

以下のプログラムは、n=5、k=2の場合のP の値を求めるプログラムです。

import itertools

per = [1, 2, 3, 4, 5]
per_list = list(itertools.permutations(per, 2))
print(len(per_list))

解説

print(len(per_list))
len()で先ほど得た順列の全通りが何通りあるのか、つまりP の値を求めています。

実行結果

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 個を順番を考えずに選ぶ場合の選び方です。

総数はC で表され、以下の公式から求められます。

組み合わせを全通り表示

組み合わせを全通り表示するには、「combinations()」を使用します。

combinations(配列, k)

ここで、nは配列の要素数になります。

以下のプログラムは、n=5、k=2の場合の組み合わせを全通り表示するプログラムです。

import itertools

com = [1, 2, 3, 4, 5]
com_list = list(itertools.combinations(com, 2))
print(com_list)

解説

com_list = list(itertools.combinations(com, 2))
この部分で、組み合わせの全通りのリストを得ることができます。

実行結果

[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]

組み合わせが何通りかを求める

C の値を求めましょう。

以下のプログラムは、n=5、k=2の場合のC の値を求めるプログラムです。

import itertools

com = [1, 2, 3, 4, 5]
com_list = list(itertools.combinations(com, 2))
print(len(com_list))

解説

print(len(com_list))
len()で先ほど得た組み合わせの全通りが何通りあるのか、つまりC 値を求めています。

実行結果

10

まとめ

今回の記事では、itertoolsを使った以下の方法について紹介しました。

  • 順列を全通り表示する方法
     →permutations()を使用
  • 順列が何通りか求める方法
     →len()を使用
  • 組み合わせを全通り表示する方法
     →combinations()を使用
  • 組み合わせが何通りか求める方法
     →len()を使用

リストの要素全通りの組み合わせでfor文を回したい時などはよくあるので、しっかりと覚えておきましょう!