我有一個Python陣列,像這樣:如何求和一列列表?
[[1,2,3],
[1,2,3]]
我可以做sum(array[i])
添加行,我怎麼可以總結列,使用雙for循環?
I.E.對於第一列,我能得到2,然後是4,那麼6
我有一個Python陣列,像這樣:如何求和一列列表?
[[1,2,3],
[1,2,3]]
我可以做sum(array[i])
添加行,我怎麼可以總結列,使用雙for循環?
I.E.對於第一列,我能得到2,然後是4,那麼6
使用for
環(在generator expression):
data = [[1,2,3],
[1,2,3]]
column = 1
print sum(row[column] for row in data)
你並不需要一個循環,使用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
[sum(row[i] for row in array) for i in range(len(array[0]))]
應該這樣做。 len(array[0])
是列數,所以i
迭代通過那些。生成器表達式row[i] for row in array
遍歷所有行併爲每個列號選擇一個列。
您可以在numpy感興趣,它具有更高級陣列功能。 其中之一是容易總結列:
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.
我認爲你的回答是錯誤的。你可能意味着a.sum(column_idx),但即使這也是錯誤的,因爲爲了得到OP列的總和,因爲OP問你需要column_idx = 0 – 2016-08-05 20:14:51
我認爲最簡單的方法是這樣的:
sumcolumn=data.sum(axis=0)
print (sumcolumn)
它看起來像這個答案假設numpy,但確實改善另一個numpy答案。如果您填寫此代碼示例,它可以幫助其他人 – abathur 2017-05-06 16:51:35
歡迎來到SO。請閱讀[如何解答](http://stackoverflow.com/help/how-to-answer),並按照指南提供優質的答案。 – thewaywewere 2017-05-06 16:58:10
您可以使用numpy的:
import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)
考慮遷移到NumPy的ndarrays爲更好的切片(在你的情況下,它會是'a [:,i] .sum()') – wim 2013-03-12 03:02:20