求和列表中的一列(跟进)

时间:2012-06-08 13:45:14

标签: python

我有一个如下所示的列表:

('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循环中运行而我真正想做的是添加所有输出的总和我真的很困惑而且我不确定该怎么做我虽然我可以再做同样的事情,但它没有工作

3 个答案:

答案 0 :(得分:7)

生成器表达式是你的朋友:

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

(虽然我希望你的列表不是字面上称为'list',因为这会影响内置函数。)

对于后续内容,它确实取决于“添加所有输出的总和”的确切含义。这可能意味着有一些列表,比如你发布的那些你正在迭代的列表,并且你想要将所有的总和加在一起。这将是:

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

甚至只是

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

如果你的意思是想要一个累积总和 - 所以,你希望每个阶段的运行总数作为另一个内部总和添加到它 - 看看this previous question about cumulative sums,或者只写出循环:

cumsum = 0
for list in lists:
   cumsum += sum(l[1] for l in list)
   print(cumsum)

答案 1 :(得分: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

答案 2 :(得分:0)

sum([item[-1] for item in list])您可以使用列表推导。