如何汇总列表的列?

时间:2013-03-12 02:51:43

标签: python for-loop

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

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

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

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

8 个答案:

答案 0 :(得分:20)

使用for循环(在generator expression中):

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

column = 1
print sum(row[column] for row in data)

答案 1 :(得分:6)

试试这个:

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

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

zip function description

答案 2 :(得分:5)

您不需要循环,使用zip()转置列表,然后选择所需的列:

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

(请注意,在2.x中,zip()会返回一个列表,因此您不需要list()来电。)

编辑:在不使用zip()的情况下,解决此问题的最简单方法可能是:

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

我们只是循环遍历行,获取元素并将其添加到我们的总数中。

然而,由于我们有内置函数可以帮助我们,因此效率较低而且毫无意义。通常,请使用zip()

答案 3 :(得分:4)

[sum(row[i] for row in array) for i in range(len(array[0]))]

应该这样做。 len(array[0])是列数,因此i遍历这些列。生成器表达式row[i] for row in array遍历所有行,并为每个列号选择一个列。

答案 4 :(得分:2)

我认为最简单的方法就是:

sumcolumn=data.sum(axis=0)

print (sumcolumn)

答案 5 :(得分: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

答案 6 :(得分: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.

答案 7 :(得分:0)

你可以使用numpy:

import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)