python函数查找数组中正数的和

python函数查找数组中正数的和,python,arrays,sum,Python,Arrays,Sum,我需要写一个函数,它接受一个数字数组,并找到所有数字的最大和。换句话说,我需要找到正数的和。我写了这个,我得到“列表超出范围” 想法 def maximum_sub(A): x = 0 i = 0 for i in A: while A[i] > 0: x+=A[i] i+=1 return x 改用超级函数和列表理解: >>>

我需要写一个函数,它接受一个数字数组,并找到所有数字的最大和。换句话说,我需要找到正数的和。我写了这个,我得到“列表超出范围”

想法

    def maximum_sub(A):
        x = 0
        i = 0
        for i in A:
            while A[i] > 0:
            x+=A[i]
            i+=1
        return x

改用超级函数和列表理解:

>>> a = [1, 2, 3, -4, 5, -3, 7, 8, 9, 6, 4, -7]
>>> sum(x for x in a if x > 0)
45

[if x>0时x代表x]
将创建一个由
a
中的正值组成的数组

sum(…)
将返回该数组中元素的和。

有更好的求和和和理解方法,但我假设您正在编写一个函数作为算法练习

你不需要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

用于
For
循环。在编写
while
之前,您是否尝试打印
i
以查看它实际上在做什么?当您在
中为i执行
时,i不是索引,而是列表中的一项-这是一个提示…如果
,您可能希望使用
。考虑编码器的注释,也看看你的缩进。工作得很好,但是对于a=(2,-1,2,3,4,5)IM得到11而不是10。嗯,没关系。因为2+2+3+4等于11。所以,答案键是错误的。谢谢大家!@UrielEli,回答得很好,但为什么不这么做:
sum(如果i>0,那么i代表i)
。。。另外,
+[0]
您不需要它。是的,生成器表达式会更快,而且做额外的
[0]
是没有意义的。如果没有要计算的内容,或者如果您给出一个空列表,结果将是0,这正是您想要的。@coder谢谢,我想这会引起一个错误。修正了第二个示例使用
max_sum
的简短解释:
sum
本身是Python中的内置函数,通常不希望覆盖内置函数。