正数 // 负数
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