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 で導入されました。