次のような Python 配列があります。
[[1,2,3],
[1,2,3]]
を実行して行を追加できsum(array[i])
ますが、double for ループを使用して列を合計するにはどうすればよいですか?
最初の列の IE では、2、次に 4、次に 6 を取得できました。
[sum(row[i] for row in array) for i in range(len(array[0]))]
それはそれを行う必要があります。len(array[0])
は列の数なのでi
、それらを繰り返します。ジェネレータ式row[i] for row in array
は、すべての行を調べて、列番号ごとに 1 つの列を選択します。
ループは必要ありません。使用zip()
してリストを転置してから、目的の列を取得します。
sum(list(zip(*data)[i]))
(2.x ではリストを返すので、呼び出しzip()
は必要ありません)。list()
編集: を使用しないこの問題の最も簡単な解決策はzip()
、おそらく次のようになります。
column_sum = 0
for row in data:
column_sum += row[i]
行をループして要素を取得し、それを合計に追加するだけです。
ただし、これを行うための組み込み関数があることを考えると、これは効率が悪く、むしろ無意味です。一般的には、 を使用しますzip()
。
あなたが使用することができますzip()
:
In [16]: lis=[[1,2,3],
....: [1,2,3]]
In [17]: map(sum,zip(*lis))
Out[17]: [2, 4, 6]
または単純な for ループを使用:
In [25]: for i in xrange(len(lis[0])):
summ=0
for x in lis:
summ+=x[i]
print summ
....:
2
4
6
より高度な配列機能を備えたnumpyに興味があるかもしれません。そのうちの 1 つは、列を簡単に合計することです。
from numpy import array
a = array([[1,2,3],
[1,2,3]])
column_idx = 1
a[:, column_idx].sum() # ":" here refers to the whole array, no filtering.