[英]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.