我需要编写一个函数,它接受一个数字数组并找到所有数字的最大总和。换句话说,我需要找到正数的总和。我写了这个,我得到了#34;列表超出范围"
想法?
def maximum_sub(A):
x = 0
i = 0
for i in A:
while A[i] > 0:
x+=A[i]
i+=1
return x
答案 0 :(得分:4)
改为使用超级函数和列表推导:
>>> a = [1, 2, 3, -4, 5, -3, 7, 8, 9, 6, 4, -7]
>>> sum(x for x in a if x > 0)
45
[x for x in a if x > 0]
将创建一个由a
中的正值组成的数组。
sum(...)
将返回该数组中元素的总和。
答案 1 :(得分:4)
总结和理解有更好的方法,但我会假设你正在编写一个函数作为算法练习。
您不需要while循环。使用if检查它是否为正数,并将其添加到总和中。否则,不要做任何事情。 for循环将自动迭代您的值。
def maximum_sum(A):
x = 0
for i in A:
if i > 0:
x += i
return x
一些建议:明确地命名。这是我可能会使用的一些名字:
def maximum_sum(arr):
max_sum = 0
for num in arr:
if num > 0:
max_sum += num
return max_sum