【问题标题】:Return sum of negative and positive floating point numbers返回正负浮点数之和
【发布时间】:2013-02-23 02:43:52
【问题描述】:

我正在尝试创建一个函数,该函数采用浮点列表并返回两个数字的列表,这等于所有正浮点和所有负浮点的总和。例如:

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

但我有点卡住了。谁能帮助我更好地理解这一点?

【问题讨论】:

    标签: python list python-3.x floating-point


    【解决方案1】:

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

    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)))
    

    【讨论】:

    • 条件颠倒
    【解决方案2】:
    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)),它使用与 list comprehensions [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 == 1 和 False == 0 因此 sums[n &gt; 0] 是 sums[1] 如果 n &gt; 0 是 sums[0] 否则是 sums[0] 的事实。

    【讨论】:

    • 谢谢!您能解释一下您是如何找到解决方案的吗?
    • @user2101463:我已经添加了解释
    【解决方案3】:

    另一个解决方案:

    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)
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多