Python でデカルト積を取得する
このチュートリアルでは、Python でリストのデカルト積を取得するためのさまざまな方法を学習します。2つのセットの直積は、最初のセットの各順序対の最初の要素と 2 番目のセットの 2 番目の要素を持つ、すべての可能な順序対のセットになります。
Python で次のメソッドを使用して、2D リストとして保存されたセットのデカルト積を見つけることができます。
Python で itertools
モジュールを使用してデカルト積を取得する
itertools
モジュールの product(*iterables, repeat=1)
メソッドは、入力として iterables
を受け取り、出力としてデカルト積を返します。デカルト積の順序は、指定された引数 iterables
の各セット/リストの順序になります。オプションのキーワード引数 repeat
は、入力 iterables
を使用して製品を繰り返す回数を表します。そして、*
は引数 iterables
を解凍するために使用されます。
以下のサンプルコードは、itertools.product()
メソッドを使用して Python でデカルト積を取得する方法を示しています。
from itertools import product
mylists = [["a", "b"], [1, 2]]
for elem in product(*mylists):
print(elem)
出力:
('a', 1)
('a', 2)
('b', 1)
('b', 2)
Python でリスト内包法を使用してデカルト積を取得する
リストの総数がわかっている場合は、リスト内包法を使用して、リストのデカルト積を取得できます。
リストの数またはリストの数が固定されていることがわかっている場合は、for
ループを使用して各リスト要素を反復処理し、デカルト積を取得する必要があります。
以下のサンプルコードは、Python でリスト内包法を使用して、リストのデカルト積を取得する方法を示しています。
mylists = [["a", "b"], [1, 2]]
crt_prd = [(x, y) for x in mylists[0] for y in mylists[1]]
print(crt_prd)
出力:
[('a', 1), ('a', 2), ('b', 1), ('b', 2)]
Python で反復法を使用してデカルト積を取得する
Python でデカルト積を取得する別の方法は、反復的な for
ループアプローチを使用することです。この方法では、デカルト積のリストまたはセットの数を気にする必要がないため、上記で使用したリスト内包表記よりも優れたアプローチです。
したがって、各リストの各要素にアクセスする代わりに、反復アプローチを使用します。以下のサンプルコードは、反復法を使用して Python でデカルト積を見つける方法を示しています。
def get_cart_prd(pools):
result = [[]]
for pool in pools:
result = [x + [y] for x in result for y in pool]
return result
mylists = [["a", "b"], [1, 2, 3]]
print(get_cart_prd(mylists))
出力:
[['a', 1], ['a', 2], ['a', 3], ['b', 1], ['b', 2], ['b', 3]]