繁体   English   中英

如何将清单加在一起

[英]How to add list together

我试图找出一个问题,并且感到困惑。 基本上我有一个清单,它应该代表银行对帐单。 我正在尝试将列表加在一起,以便将应该表示提现的负数加在一起,并将正数加在一起以表示存款。 到目前为止,我知道了

def statement(l):
    deposit = 0
    withdrawl = 0
    for a in l:
        a = sum(l)
    for b in l:
        if b == -b:
            b = sum(b)        
    return [a,-b]

但是当我执行statement([30.95,-15.67,45.56,-55.00,43.78])它应返回[49.620000000000005, -43.78] ,应该返回[120.29,-70.67] ,有人可以帮忙吗?

谢谢!

以下似乎可以做到这一点:

In [1]: def statement(l):
   ...:     pos, neg = 0, 0
   ...:     for a in l:
   ...:         if a > 0: pos += a
   ...:         else: neg += a
   ...:     return pos, neg
   ...: 

In [2]: statement([30.95,-15.67,45.56,-55.00,43.78])
Out[2]: (120.29, -70.67)

它返回一个tuple而不是一个list ,因为长度是固定的,这似乎更合乎逻辑。


以下是有关您的尝试的一些评论:

for a in l:
    a = sum(l)

这将导致将l的所有元素的总和计算len(l)次,这没有多大意义。 要获得总和,只需执行a = sum(l)

if b == -b: -您可能希望它检查一个数字是否为负,但实际上它会检查b是否等于零,因为零是唯一的x所以x == -x if b < 0: :, if b < 0:需要。


我检查了在CPython 3.3上哪个答案更快,并且毫不奇怪,在给定的示例中,这个答案快了大约2倍: 2.3 us per loop 5.98 us per loop

这应该做您想要的:

def statement(l):
    pos = sum(i for i in l if i > 0)
    neg = sum(i for i in l if i < 0)
    return pos, neg

您的错误是您尝试分配给迭代变量。 如果要累加一个值,请在for循环外首先将其定义为0 for然后在每个步骤中将其添加到该值。

在循环结束时, a包含l中所有元素的总和, b包含l最后一个元素,因为最终检查总是失败,并且b不会被覆盖(这说明了得到的结果)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM