リスト内の各要素のペアに対する操作 [重複] 質問する

リスト内の各要素のペアに対する操作 [重複] 質問する

Python を使用して、リスト内のすべての可能なペアを比較したいと思います。

私が

my_list = [1,2,3,4]

リストの 2 つの要素のすべての組み合わせに対して操作 (foo と呼びます) を実行したいと思います。

最終結果は次のようになるはずです

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

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

ベストアンサー1

チェックアウト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 で導入されました。

おすすめ記事