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 回答