簡體   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