如何使用Python中的sum()函数查找列表中所有正数的和?

如何使用Python中的sum()函数查找列表中所有正数的和?,python,list,testing,calculation,Python,List,Testing,Calculation,编辑1:已解决!解决方案是在arr中使用i表示i,如果i>0,这是@sushanth给我的 代码的最终产品: def positive_sum(arr): return sum(i for i in arr if i > 0) 我试图完成一些代码战挑战,我遇到了一个给我带来问题的挑战。给我一个正数和负数的列表,我应该找到所有正数的总和 以下是我已经拥有的: def positive_sum(arr): for n in arr: if n < 0:

编辑1:已解决!解决方案是在arr中使用
i表示i,如果i>0
,这是@sushanth给我的

代码的最终产品:

def positive_sum(arr):
    return sum(i for i in arr if i > 0)

我试图完成一些代码战挑战,我遇到了一个给我带来问题的挑战。给我一个正数和负数的列表,我应该找到所有正数的总和

以下是我已经拥有的:

def positive_sum(arr):
    for n in arr:
        if n < 0:
            arr.remove(n)
    return sum(arr)
然而,每当我运行这些测试时,除了最后一个测试,所有的测试都通过了,所有的测试都是负数。由于某种原因,它的结果是
-6
,即使所有负数都应该被删除

为什么会这样?如何确保所有测试都通过?

使用生成器尝试sum(),如果条件为:

result = sum(x for x in [1, 2, 3, 4, 5] if x > 0)
print(result)

您可以使用
sum(如果i>0,则在arr中i代表i)代替remove
?在迭代列表时不要从列表中删除。你弄乱了迭代器,它会导致元素被跳过。@sushanth是的,成功了!我在另一篇stackoverflow文章中做了类似的事情,但我认为这是为了在另一个用例中使用。这个很好用@哦,好吧。谢谢你的提示!这回答了你的问题吗?无需使用
列表
理解,
sum()
可以将生成器作为参数。创建一个
列表
首先会浪费内存和计算时间。尽管如此,还是要好好玩玩它。生成器表达式也往往较慢,因此对于小列表,如果额外的内存使用是可以接受的,则理解可能是更好的选择。完全同意,更改为生成器,很好,谢谢!
result = sum(x for x in [1, 2, 3, 4, 5] if x > 0)
print(result)