私はいくつかの番号のリストを持っています:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
使用しているすべてのリストが同じ長さであると仮定して、これらのリストの要素を追加するにはどうすればよいですか?
これを実行して上記のリストに出力したいのは、次のようなものです。
[6, 9, 12, 15, 18]
ある種のループが必要になることはわかっていますが、どうすればエレガントにループできますか?
私はいくつかの番号のリストを持っています:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
使用しているすべてのリストが同じ長さであると仮定して、これらのリストの要素を追加するにはどうすればよいですか?
これを実行して上記のリストに出力したいのは、次のようなものです。
[6, 9, 12, 15, 18]
ある種のループが必要になることはわかっていますが、どうすればエレガントにループできますか?
この機能的なスタイルのコードを試してください:
>>> map(sum, zip(*lists))
[6, 9, 12, 15, 18]
このzip
関数は、同じインデックスを持つ要素に一致します。
>>> zip(*lists)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
オンラインでの動作を確認してください: ideone
Python 3.x では、map
リストを返さないことに注意してください。リストが必要な場合は、次の質問を参照してください。
(単に呼び出すことができますlist
)。
>>> lis=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]
>>> [sum(x) for x in zip(*lis)]
[6, 9, 12, 15, 18]
numpy の使用:
>>> seq = np.array([
... [1,2,3,4,5],
... [2,3,4,5,6],
... [3,4,5,6,7]])
>>> np.sum(seq,axis=0)
array([ 6, 9, 12, 15, 18])
仮定:
a = [1,2,3,4,5]
b = [2,3,4,5,6]
c = [3,4,5,6,7]
これを行うだけです:
[sum(n) for n in zip(*[a, b, c])]
どうですか:
a = [1,2,3,4,5]
b = [2,3,4,5,6]
c = [3,4,5,6,7]
s = map(sum, zip(a,b,c))