ランダムの森

20代エンジニアです。プログラミングについて主に書いてます。

pythonのitertoolsを使ってベクトル各要素の総当たりを行う方法

pythonでAというベクトルとBというベクトルがあった時に、その要素をA vs Bで総当たり的に計算させて最適解を求めたいという時に使えるツールを備忘です。

itertoolsというライブラリーを使います。

import itertools

以下のようにベクトルAとベクトルBの各要素で総当たりprintを行います。
結果は全組み合わせが表示されます。

A = ['1', '2', '3','4']
B = ['a', 'b', 'c','d']

for i, j in itertools.product(x, y):
    print(i, j)

output>
1 a
1 b
1 c
1 d
2 a
2 b
2 c
2 d
3 a
3 b
3 c
3 d
4 a
4 b
4 c
4 d

一方、同じベクトル同士で総当たりを行いたい場合もあると思います。
そんな時は以下のようにif文使ってワンクッションおいて、同じ要素同士の激突を避ければおっけです。

for i, j in itertools.product(x,x):
    if i != j:
        print(i, j)

output>
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3