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