更新:2024/07/14

Pythonの標準ライブラリitertoolsで簡単に直積を計算する方法

はるか
はるか
Pythonの標準ライブラリ、itertoolsを使うと、直積の計算が簡単。
ふゅか
ふゅか
直積って、集合の要素同士の全ての組み合わせを作る方法だよね!

1. 直積とは

二つの集合 \( A \) と \( B \) があるとします。これらの直積 \( A \times B \) は次のように定義されます。

\[ A \times B = \{ (a, b) \mid a \in A, b \in B \} \]

ふゅか
ふゅか
例えば、A = {1, 2} と B = {x, y} があるとするね。直積 A×B は {(1, x), (1, y), (2, x), (2, y)} になるんだ。

集合における直積とは何か?その概念と応用例

2. Pythonで直積を計算する方法

Pythonでは、itertools モジュールを使用して直積(Cartesian product)を簡単に表すことができます。

はるか
はるか
Pythonでは、itertoolsモジュールが使える。

ふゅか
ふゅか
itertools.productを実際に使って直積を計算してみよう!

2.1. itertools.productを使用する

itertools.product は、任意の数の入力イテラブルから直積を生成する関数です。

2.2. 二つの集合の直積

まず、二つの集合 \( A \) と \( B \) の直積を計算する例を示します。

import itertools

A = [1, 2]
B = ['x', 'y',"xyz"]

# itertools.productを使って直積を計算
product = list(itertools.product(A, B))

print(product)

このコードの出力は次のようになります。

[(1, 'x'), (1, 'y'), (1, 'xyz'), (2, 'x'), (2, 'y'), (2, 'xyz')]

2.3. 三つ以上の集合の直積

同様に、三つ以上の集合の直積も計算できます。

import itertools

A = [1, 2]
B = ['x', 'y']
C = ['a', 'b']

# 三つの集合の直積を計算
product = list(itertools.product(A, B, C))

print(product)

このコードの出力は次のようになります:

[(1, 'x', 'a'), (1, 'x', 'b'), (1, 'y', 'a'), (1, 'y', 'b'), (2, 'x', 'a'), (2, 'x', 'b'), (2, 'y', 'a'), (2, 'y', 'b')]

2.4. 内包表記を使用する方法

itertools を使わずに内包表記を使って直積を計算することもできます。

A = [1, 2]
B = ['x', 'y']

# 内包表記を使用して直積を計算
product = [(a, b) for a in A for b in B]

print(product)

このコードの出力は次のようになります。

[(1, 'x'), (1, 'y'), (2, 'x'), (2, 'y')]
PR