15

我想在 python 中求和一个二维数组:

这是我所拥有的:

def sum1(input):
    sum = 0
    for row in range (len(input)-1):
        for col in range(len(input[0])-1):
            sum = sum + input[row][col]

    return sum


print sum1([[1, 2],[3, 4],[5, 6]])

它显示4而不是21(1+2+3+4+5+6 = 21)。我的错误在哪里?

4

13 回答 13

49

我认为这更好:

 >>> x=[[1, 2],[3, 4],[5, 6]]                                                   
>>> sum(sum(x,[]))                                                             
21
于 2012-11-27T06:07:33.340 回答
36

您可以将该函数重写为,

def sum1(input):
    return sum(map(sum, input))

基本上,map(sum, input)将返回一个包含所有行总和的列表,然后,最外层sum将添加该列表。

例子:

>>> a=[[1,2],[3,4]]
>>> sum(map(sum, a))
10
于 2012-05-23T03:58:07.720 回答
10

numpy的解决方案就是:

import numpy as np
x = np.array([[1, 2],[3, 4],[5, 6]])

结果:

>>> b=np.sum(x)
   print(b)
21
于 2012-05-23T03:50:33.013 回答
9

这是另一个替代解决方案

In [1]: a=[[1, 2],[3, 4],[5, 6]]
In [2]: sum([sum(i) for i in a])
Out[2]: 21
于 2015-05-14T16:44:16.443 回答
7

更好的是,忘记索引计数器,只遍历项目本身:

def sum1(input):
    my_sum = 0
    for row in input:
        my_sum += sum(row)
    return my_sum

print sum1([[1, 2],[3, 4],[5, 6]])

Python 的一个很好的(和惯用的)特性是让它为你计算。sum()是内置的,您不应该使用内置名称作为您自己的标识符。

于 2012-05-23T03:59:11.690 回答
6

这是问题

for row in range (len(input)-1):
    for col in range(len(input[0])-1):

尝试

for row in range (len(input)):
    for col in range(len(input[0])):

Python 的 range(x) 已经从 0..x-1

range(...) range([start,] stop[, step]) -> 整数列表

Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
于 2012-05-23T03:45:12.467 回答
1

range()在 python 中排除最后一个元素。换句话说,range(1, 5)是 [1, 5) 或 [1, 4]。因此,您应该只使用len(input)迭代行/列。

def sum1(input):
    sum = 0
    for row in range (len(input)):
        for col in range(len(input[0])):
            sum = sum + input[row][col]

    return sum
于 2012-05-23T03:45:21.920 回答
1

不要将 -1 放在 range(len(input)-1) 中,而是使用:

range(len(input))

range 自动返回比参数值小一的列表,因此无需显式给出 -1

于 2012-05-23T03:46:45.803 回答
1

快速回答,使用...

total = sum(map(sum,[array]))

[array]你的数组标题在哪里。

于 2018-04-01T20:54:51.987 回答
1
def sum1(input):
    return sum([sum(x) for x in input])
于 2018-09-13T22:49:50.737 回答
1

在 Python 3.7 中

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

输出

10
于 2019-01-21T14:51:34.627 回答
0

似乎普遍的共识是 numpy 是一个复杂的解决方案。与更简单的算法相比。但是为了存在答案:

import numpy as np


def addarrays(arr):

    b = np.sum(arr)
    return sum(b)


array_1 = [
  [1, 2],
  [3, 4],
  [5, 6]
]
print(addarrays(array_1))

这似乎是首选的解决方案:

x=[[1, 2],[3, 4],[5, 6]]                                                   
sum(sum(x,[]))                                                             
于 2019-09-26T00:14:27.753 回答
0
def sum1(input):
    sum = 0
    for row in input:
        for col in row:
            sum += col
    return sum
print(sum1([[1, 2],[3, 4],[5, 6]]))
于 2021-08-17T07:57:21.237 回答