1. ホーム
  2. python

[解決済み] リスト内の各要素のペアに対する演算

2022-09-02 01:12:19

質問

Pythonを使って、リスト内のすべてのペアを比較したいのですが、可能でしょうか?

例えば

my_list = [1,2,3,4]

リストから2つの要素の組み合わせごとに操作(fooと呼ぶことにする)を行いたい。

最終的な結果は、以下のようになるはずです。

foo(1,1)
foo(1,2)
...
foo(4,3)
foo(4,4)

最初に考えたのは、手動でリストを2回反復することでしたが、それはあまりpythonicではないようです。

どのように解決するのですか?

チェックアウト product() の中にある itertools モジュールの中にあります。 これは、あなたが説明したとおりのことをします。

import itertools

my_list = [1,2,3,4]
for pair in itertools.product(my_list, repeat=2):
    foo(*pair)

と同等である。

my_list = [1,2,3,4]
for x in my_list:
    for y in my_list:
        foo(x, y)

編集します。 よく似た機能として、以下の2つがあります。 permutations() combinations() . どのように異なるかを説明するために

product() は、すべての重複を含む、要素のすべての可能なペアを生成します。

1,1  1,2  1,3  1,4
2,1  2,2  2,3  2,4
3,1  3,2  3,3  3,4
4,1  4,2  4,3  4,4

permutations() は、各一意な要素の組の一意な順序をすべて生成し、そのために x,x の重複を排除する。

 .   1,2  1,3  1,4
2,1   .   2,3  2,4
3,1  3,2   .   3,4
4,1  4,2  4,3   .

最後に combinations() は、辞書順のユニークな要素のペアをそれぞれ生成するだけです。

 .   1,2  1,3  1,4
 .    .   2,3  2,4
 .    .    .   3,4
 .    .    .    .

これらの3つの関数はすべてPython 2.6で導入されました。