开发者问题收集

正数 // 负数

2016-09-22
2236

这是一个相当简单的问题,但我仍在练习使用 for 循环迭代多个变量。在下面,我试图返回一个新列表,其中 x 是正数的数量,y 是输入数组 arr 中的负数的总和。

如果输入数组为空或为 null,我将返回一个空数组。

这就是我得到的!

def count_positives_sum_negatives(arr):
    return [] if not arr else [(count(x), sum(y)) for x, y in arr]

当前正在接收...

TypeError:“int”对象不可迭代

3个回答

只需使用 sum 理解

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
>>> sum(1 for x in arr if x > 0)
10
>>> sum(x for x in arr if x < 0)
-65
wim
2016-09-22

wim 的方法很好。Numpy 也适合处理这类事情。

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15])
print([arr[arr >= 0].size, arr[arr < 0].sum()])
>> [10, -65]
Bob Haffner
2016-09-22

您收到的错误来自此部分 for x,y in arr ,这意味着 arr 应为 2 个元素的元组列表(或任何类似的容器),例如这个 [(1,2), (5,7), (7,9)] ,但您拥有的是一个数字列表,其中不包含任何其他内容……

现在要获得您想要的结果,您可以使用 wim 的解决方案,它需要对列表进行两次迭代,或者您可以使用

>>> def fun(iterable):
        if not iterable:
            return []
        pos = 0
        neg = 0
        for n in iterable:
            if n>=0:
                pos = pos + 1
            else:
                neg = neg + n
        return [pos, neg]

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
>>> fun(arr)
[10, -65]
>>> 
一次性获得它
Copperfield
2016-09-22