返回正负浮点数的和

2 投票
3 回答
2473 浏览
提问于 2025-04-17 16:50

我正在尝试创建一个函数,这个函数接收一个浮点数的列表,然后返回一个包含两个数字的列表,这两个数字分别是所有正浮点数的总和和所有负浮点数的总和。例如:

statement([30.95, -15.67, 45.56, -55.00, 43.78])
returns [-70.67, 120.29]

这是我到目前为止能做到的:

res= []
for i in range(len(l)-1):
    for j in range(i,len(l)):
        if l[i]>=l[i+1]:
            res = 
return res

但是我有点卡住了。有没有人能帮我更好地理解这个?

3 个回答

4

又一个解决方案:

def statement(l):
    return reduce(lambda (n, p), x: (x < 0) and (n + x, p) \
        or (n, p + x), l, (0, 0))

statement([30.95, -15.67, 45.56, -55.00, 43.78])
(-70.67, 120.29)
5
def sum_negpos(numbers):
    return [sum(n for n in numbers if n < 0), # sum of negative numbers
            sum(n for n in numbers if n > 0)] # sum of positive numbers

这个解决方案使用了生成器表达式 (x for x in it if cond(x)),它的语法和列表推导式 [x for x in it if cond(x)] 是一样的,但生成器表达式一次只产生一个值,而不是一次性创建整个列表。

在一次遍历中:

def sum_negpos(numbers):
    sums = [0, 0] # negative, positive sum
    for n in numbers:
        sums[n > 0] += n
    return sums

这个解决方案利用了Python中 True == 1False == 0 的特性,因此 sums[n > 0] 如果 n > 0 就是 sums[1],否则就是 sums[0]

5

我会把它们分成两个列表:

positives = [n for n in numbers if n < 0]
negatives = [n for n in numbers if n > 0]

然后用 sum() 来计算:

return sum(negatives), sum(positives)

或者如果你想让老师生气的话:

statement = lambda n: map(sum, zip(*map(lambda x: (x, 0)[::cmp(0, x)], n)))

撰写回答