Python Tips: 2 つのリストの要素同士の演算をしたい

Python で 2 つのリストの要素同士の演算を行う方法をご紹介します。

要素同士の演算には次の 2 つがあるかと思います。

  • i 番目の要素同士をかけあわせる
  • すべての要素の組み合わせをかけあわせる

以下、それぞれのやり方を見ていきます。

i 番目の要素同士をかけあわせる

zip() と内包表記」または map() を使う方法が便利です。

zip() と内包表記:

li1 = [1, 3, 5]
li2 = [2, 4, 6]

combined1 = [x * y for (x, y) in zip(li1, li2)]
# => [2, 12, 30]

map():

from operator import mul

li1 = [1, 3, 5]
li2 = [2, 4, 6]

combined2 = map(mul, li1, li2)
# => [2, 12, 30]

ここで、 mul は2項演算子 * と同じ働きをする関数で、引数を 2 つ受け取ります。

すべての要素の組み合わせをかけあわせる

すべての組み合わせをかけあわせるのは内包表記を使う方法がシンプルかつきれいです。

li1 = [1, 3, 5]
li2 = [2, 4, 6]

combined3 = [(x, y) for x in li1 for y in li2]
# => [(1, 2), (1, 4), (1, 6), (3, 2), (3, 4), (3, 6), (5, 2), (5, 4), (5, 6)]

len(combined3)
# => 9

for x in 1つめのリスト for y in 2つめのリスト とすることで、すべての要素の組み合わせを作ることができます。

以上です。

参考