1

私は質問を理解しようとしていますが、混乱しています。基本的に私はリストを持っていて、それは銀行取引明細書を表すことになっています。リストを足し合わせて、撤退を表すはずの負の数を足し合わせ、預金を表すために正の数を足し合わせようとしています。これまでのところ私は得た

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]ことになっているときにそれは戻ってきます誰かが助けることができますか?

ありがとう!

4

2 に答える 2

8

以下がそれを行うようです:

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ではなく aを返します。これはlist、長さが固定されているため、より論理的に見えます。


あなたの試みについてのコメントは次のとおりです。

for a in l:
    a = sum(l)

lこれは、計算された時間のすべての要素の合計につながりますがlen(l)、これはあまり意味がありません。合計を取得するには、1 回だけ実行a = sum(l)します。

if b == -b:-おそらく、これは数値が負かどうかをチェックすることを期待していますが、実際にbはゼロに等しいかどうかをチェックxx == -xます。あなたがしたいif b < 0:


CPython 3.3でどちらの答えが速いかを確認しましたが、当然のことながら、これは与えられた例で約2倍高速です: 2.3 us per loopvs 5.98 us per loop.

于 2013-02-25T07:49:52.140 に答える
4

これはあなたが望むことをするはずです:

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 として定義し、次に各ステップでそれに追加します。

ループの最後に、aのすべての要素の合計が含まれlbの最後の要素が含まれますl。これは、最終チェックが常に失敗し、b上書きされることがないためです (これにより、取得した結果が説明されます)。

于 2013-02-25T07:51:28.197 に答える