返回负和正浮点数的和

use*_*463 2 python floating-point list python-3.x

我正在尝试创建一个函数,它接受一个浮点列表并返回两个数字的列表,它等于所有正浮点数和所有负浮点数的总和.例如:

statement([30.95, -15.67, 45.56, -55.00, 43.78])
returns [-70.67, 120.29]
Run Code Online (Sandbox Code Playgroud)

这是迄今为止能够做到的:

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

但我有点卡住了.任何人都可以帮我理解这一点好一点吗?

Ble*_*der 5

我将它们过滤成两个列表:

positives = [n for n in numbers if n < 0]
negatives = [n for n in numbers if n > 0]
Run Code Online (Sandbox Code Playgroud)

然后使用sum():

return sum(negatives), sum(positives)
Run Code Online (Sandbox Code Playgroud)

或者如果你想让你的导师发疯:

statement = lambda n: map(sum, zip(*map(lambda x: (x, 0)[::cmp(0, x)], n)))
Run Code Online (Sandbox Code Playgroud)

  • 条件相反 (2认同)

jfs*_*jfs 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
Run Code Online (Sandbox Code Playgroud)

该解决方案使用生成器表达式(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
Run Code Online (Sandbox Code Playgroud)

该解决方案利用了以下事实True == 1,并False == 0在Python因此sums[n > 0]sums[1]如果n > 0它是sums[0]其他.