17

次のような Python 配列があります。

[[1,2,3],
 [1,2,3]]

を実行して行を追加できsum(array[i])ますが、double for ループを使用して列を合計するにはどうすればよいですか?

最初の列の IE では、2、次に 4、次に 6 を取得できました。

4

8 に答える 8

7

これを試して:

a = [[1,2,3],
     [1,2,3]]

print [sum(x) for x in zip(*a)]

zip機能の説明

于 2013-03-12T02:54:54.410 に答える
5
[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 つの列を選択します。

于 2013-03-12T02:53:45.183 に答える
5

ループは必要ありません。使用zip()してリストを転置してから、目的の列を取得します。

sum(list(zip(*data)[i]))

(2.x ではリストを返すので、呼び出しzip()は必要ありません)。list()

編集: を使用しないこの問題の最も簡単な解決策はzip()、おそらく次のようになります。

column_sum = 0
for row in data:
    column_sum += row[i]

行をループして要素を取得し、それを合計に追加するだけです。

ただし、これを行うための組み込み関数があることを考えると、これは効率が悪く、むしろ無意味です。一般的には、 を使用しますzip()

于 2013-03-12T02:53:07.767 に答える
0

あなたが使用することができます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
于 2013-03-12T02:53:34.600 に答える
0

より高度な配列機能を備えた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.
于 2013-03-12T03:12:14.870 に答える