2

次のようなリストがあります。

('string ', 'time', 'SPY', 0, 0, 131.63, 100),
('sting ', 'time', 'SPY', 0, 0, 131.63, 700)

私がしたいのは、データの最後の列を追加することです

私がやるべきことは、リストを解凍してから、最後の列の日付の絶対値を合計することですが、正しく動作させることはできません

私が試してきたのはこれです:

testsum = sum(abs(zip(*list[:-1]))

ありがとう

編集:わかりましたので、返信ありがとうございます

sum(l[-1]) for l in list

うまくいきましたが、forループで実行していることを忘れていました。本当にやりたいのは、出力されたすべての合計を追加することですもう一度やりましたが、うまくいきませんでした

4

3 に答える 3

7

ジェネレータ式はあなたの友達です:

sum(l[-1] for l in list)

(ただし、リストが文字通り「リスト」と呼ばれないことを願っていますが、それは組み込みをシャドウするためです)。

フォローアップについては、「出力されたすべての合計を追加する」という意味に正確に依存します。これは、あなたが投稿したようなリストがいくつかあり、繰り返し処理していて、すべての合計を一度に追加したいということを意味する可能性があります。これは:

sum(sum(l[-1] for l in list) for list in lists)

または単に

sum(l[-1] for l in list for list in lists)

累積合計が必要な場合は、つまり、別の内部合計が追加されるたびに各段階で実行中の合計が必要な場合は、累積合計に関するこの前の質問を参照するか、ループを書き出すだけです。

cumsum = 0
for list in lists:
   cumsum += sum(l[1] for l in list)
   print(cumsum)
于 2012-06-08T13:47:25.813 に答える
2

与えられた

li = [('string ', 'time', 'SPY', 0, 0, 131.63, 100),
      ('sting ', 'time', 'SPY', 0, 0, 131.63, 700)]

これはうまくいきます:

sum(i[-1] for i in li)
800

更新:更新/編集された質問への回答:

liリストがループ内で値を取得する方法は明確ではありませんが、一般に、次のような構造がある場合

some_limit = .. # how often you need to loop
total = 0
for i in range(some_limit):
   # get new/updated values for li
   total += sum(i[-1] for i in li)  

print 'Your total is: ', total
于 2012-06-08T13:48:08.117 に答える
0

sum([item[-1] for item in list])リスト内包表記を使用できます。

于 2012-06-08T13:48:32.130 に答える