Pythonでの順列と組み合わせ
集合の要素の順列と組み合わせは、集合の要素の異なる配置です。
- Combination is a collection of the elements where the order doesn’t matter
- Permutation is an arrangement of a set where the order does matter.
「集合」として考えましょう。
{A, B, C}
上記のセットの組み合わせは、以下の通りです。
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
上記のセットの要素を2つ取り合わせた場合の組み合わせは以下の通りです:
('A', 'B')
('A', 'C')
('B', 'C')
このチュートリアルでは、Pythonで要素の順列と組み合わせを取得する方法について学びます。文字と数字のセットについても見ていきます。
Pythonのitertoolsモジュールのcombinations()とpermutations()メソッドを使用します。
始めましょう。 (Hajimemashou.)
数値データの順列
itertoolsモジュールのpermutations()メソッドを使用するためには、まずモジュールをインポートする必要があります。
import itertools
さあ、数の集合を定義しましょう。
val = [1, 2, 3, 4]
今、順列のリストを取得するために、permutations()メソッドを使用しましょう。
perm_set = itertools.permutations(val)
上記のコード行はitertoolsオブジェクトを提供します。異なる順列を表示するためには、このオブジェクトを反復処理します。
for i in perm_set:
print(i)
出力結果は次のようになります。 (Shutsuryoku kekka wa tsugi no yō ni narimasu.)
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
このセクションの完全なコードは以下に示されています。 (Kono sekushon no kanzen na kōdo wa ika ni shimesareteimasu.)
import itertools
val = [1, 2, 3, 4]
perm_set = itertools.permutations(val)
for i in perm_set:
print(i)
文字列の順列
次に、文字列内の文字の順列を取得する方法を学びます。
今回は、permutations() メソッドを使用しますが、引数として文字列を渡します。
import itertools
s = "ABC"
perm_set = itertools.permutations(s)
for val in perm_set:
print(val)
出力:
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
固定長の順列
私たちは、ある集合から指定された要素数だけを取り出して並べ替えることができます。これは数学の分野でのnPrと似ています。
指定された長さの順列を見つけるためのコードは以下の通りです:
import itertools
val = [1, 2, 3, 4]
perm_set = itertools.permutations(val,2)
for i in perm_set:
print(i)
出力:
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
数字データの組み合わせ
パーミュテーションの方法と同様に、itertoolsのcombinations()を使用して、セットの組み合わせを取得することもできます。
combinations()を呼び出す際には、組み合わせを求めるためのセットと、各組み合わせの長さを示す数値の2つの引数を渡す必要があります。
import itertools
val = [1, 2, 3, 4]
com_set = itertools.combinations(val, 2)
for i in com_set:
print(i)
出力:
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
文字列の組み合わせ
文字列の組み合わせも取得することができます。文字列の組み合わせを取得するには、以下のコードを使用します。
import itertools
s = "ABC"
com_set = itertools.combinations(s, 2)
for i in com_set:
print(i)
出力する
('A', 'B')
('A', 'C')
('B', 'C')
組み合わせの置換を用いた組み合わせ
itertoolsモジュールの中には、combinations_with_replacement()という別のメソッドがあります。このメソッドは、その数自体との組み合わせも考慮します。
どのように動くか見てみましょう。 (Dono yō ni ugoku ka mite mimashou.)
数値のセットについて
import itertools
val = [1, 2, 3, 4]
com_set = itertools.combinations_with_replacement(val, 2)
for i in com_set:
print(i)
結果:
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)
上記の出力と通常の組み合わせ操作の出力との違いが見えます。ここでは、通常の組み合わせ操作では存在しない(1,1)や(2,2)のような組み合わせがあります。
文字列に対して
import itertools
val = "ABCD"
com_set = itertools.combinations_with_replacement(val, 2)
for i in com_set:
print(i)
出力:
('A', 'A')
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'B')
('B', 'C')
('B', 'D')
('C', 'C')
('C', 'D')
('D', 'D')
結論
このチュートリアルでは、Pythonで集合の順列と組み合わせを見つける方法について説明しました。Pythonで利用可能なitertoolsモジュールを使用して、順列と組み合わせを見つけました。