我想在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]])
Run Code Online (Sandbox Code Playgroud)
它显示4
而不是21
(1 + 2 + 3 + 4 + 5 + 6 = 21).我的错误在哪里?
hit*_*it9 37
我认为这更好:
>>> x=[[1, 2],[3, 4],[5, 6]]
>>> sum(sum(x,[]))
21
Run Code Online (Sandbox Code Playgroud)
mac*_*how 25
你可以重写那个函数,
def sum1(input):
return sum(map(sum, input))
Run Code Online (Sandbox Code Playgroud)
基本上,map(sum, input)
将返回一个包含所有行的总和的列表,然后,最外面的sum
将添加该列表.
例:
>>> a=[[1,2],[3,4]]
>>> sum(map(sum, a))
10
Run Code Online (Sandbox Code Playgroud)
而 numpy 解决方案只是:
import numpy as np
x = np.array([[1, 2],[3, 4],[5, 6]])
Run Code Online (Sandbox Code Playgroud)
结果:
>>> b=np.sum(x)
print(b)
21
Run Code Online (Sandbox Code Playgroud)
更好的是,忘记索引计数器,只是迭代项目本身:
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]])
Run Code Online (Sandbox Code Playgroud)
Python的一个很好的(和惯用的)功能是让它为你做计数.sum()
是内置的,您不应该使用内置的名称作为您自己的标识符.
这是另一个替代解决方案
In [1]: a=[[1, 2],[3, 4],[5, 6]]
In [2]: sum([sum(i) for i in a])
Out[2]: 21
Run Code Online (Sandbox Code Playgroud)
这是问题
for row in range (len(input)-1):
for col in range(len(input[0])-1):
Run Code Online (Sandbox Code Playgroud)
尝试
for row in range (len(input)):
for col in range(len(input[0])):
Run Code Online (Sandbox Code Playgroud)
Python的range(x)已经从0..x-1开始
range(...)range([start,] stop [,step])->整数列表
Run Code Online (Sandbox Code Playgroud)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.
归档时间: |
|
查看次数: |
54908 次 |
最近记录: |