2014/04/02

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

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

要素同士の演算というとき、次の 2 つの方法があるかと思います。

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

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

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

まずは i 番目の要素同士をかけあわせる方法を。こちらは zip と内包表記または map を使う方法が便利です。
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
combined2 = map(mul, li1, li2)
# => [2, 12, 30]
ここで、 mul は2項演算子 * と同じ働きをする関数で、引数を2つ取ります。 map には、関数、1つめのリスト、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つめのリスト」とすることで、すべての要素の組み合わせを作ることができます。

以上です。


参考
Element-wise Addition of 2 Lists in Python? - Stack Overflow

0 件のコメント: