私が今持っています:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
私が希望するのは:
[1, 2, 3]
+ + +
[4, 5, 6]
|| || ||
[5, 7, 9]
単純に 2 つのリストを要素ごとに加算します。
確かに 2 つのリストを反復処理することはできますが、そうしたくはありません。
最も Python らしい方法は何でしょうか?
ベストアンサー1
使用map
とoperator.add
:
>>> from operator import add
>>> list( map(add, list1, list2) )
[5, 7, 9]
またはzip
リストの理解で:
>>> [sum(x) for x in zip(list1, list2)]
[5, 7, 9]
タイミングの比較:
>>> list2 = [4, 5, 6]*10**5
>>> list1 = [1, 2, 3]*10**5
>>> %timeit from operator import add;map(add, list1, list2)
10 loops, best of 3: 44.6 ms per loop
>>> %timeit from itertools import izip; [a + b for a, b in izip(list1, list2)]
10 loops, best of 3: 71 ms per loop
>>> %timeit [a + b for a, b in zip(list1, list2)]
10 loops, best of 3: 112 ms per loop
>>> %timeit from itertools import izip;[sum(x) for x in izip(list1, list2)]
1 loops, best of 3: 139 ms per loop
>>> %timeit [sum(x) for x in zip(list1, list2)]
1 loops, best of 3: 177 ms per loop