我正在尝试找出一个问题,但我感到困惑。基本上我有一个列表,它应该代表银行对帐单。我正在尝试将列表加在一起,以便将本应代表提款的负数加在一起,将正数加在一起代表存款。到目前为止我得到了
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: .
我检查了哪个答案在 CPython 3.3 上更快,不出所料,这个答案在给定的示例中快了大约 2 倍:2.3 us per loop对比5.98 us per loop .
