17

我有一个 Python 数组,如下所示:

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

我可以通过执行添加行sum(array[i]),如何使用双 for 循环对列求和?

IE 对于第一列,我可以得到 2,然后是 4,然后是 6。

4

8 回答 8

30

使用for循环(在生成器表达式中):

data = [[1,2,3],
        [1,2,3]]

column = 1
print(sum(row[column] for row in data))  # -> 4
于 2013-03-12T02:56:24.597 回答
7

试试这个:

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

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

压缩功能说明

于 2013-03-12T02:54:54.410 回答
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 回答
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遍历所有行并为每个列号选择一个列。

于 2013-03-12T02:53:45.183 回答
2

我认为最简单的方法是这样的:

sumcolumn=data.sum(axis=0)

print (sumcolumn)
于 2017-05-06T16:27:44.557 回答
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感兴趣,它具有更高级的数组功能。其中之一是轻松总结一列:

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 回答
0

您可以使用 numpy:

import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)
于 2017-10-11T06:07:53.737 回答