2011-01-11 49 views
2

嘿,我希望能够执行this,但要选择我总结的清单。比方说,同样的例子,但只添加第三和第四列表中的第一个数字。如何求和元组中的一组列表中的第一个值?

+4

你真的无法适应的是回答你的问题?目前还不清楚你到底想要什么。它会始终是一个连续的范围?任何你需要第三和第四的理由?为什么不是第3和第5? – Falmarri 2011-01-11 21:53:35

+0

这是因为我有元组中的每个列表包含特定股票的日期和收盘价。要计算30天前的SMA10,我需要将元组位置30到39的收盘价总和。 – Jared 2011-01-11 22:12:16

+0

我的不好,他们是字符串。我通过这样做得到了它的工作。 关闭代码[30:39]: intclose = float(close [4]) sumclo + = intclose – Jared 2011-01-11 22:53:10

回答

8

是这样的:

sum(int(tuple_list[i][0]) for i in range(3,5)) 

范围(X,Y)生成从X整数列表(含)至y(除外)和1作为步骤。如果你想改变range(x, y, step)会做同样的事情,但会逐步增加。

你可以找到的官方文档here

或者,你可以这样做:

sum(float(close[4]) for close in tickers[30:40]) 
0

如果你想每个元素的某些属性限制,您可以将其送入发布的代码之前使用filter()在你的链接。这会让你根据你想要的来写一个独特的过滤器。这不适用于你给出的例子,但似乎你对一般情况更感兴趣。

sum(pair[0] for pair in filter(PREDICATE_FUNCTION_OR_LAMBDA, list_of_pairs)) 
1
>>> l1 
[(0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 8), (7, 9), (8, 10), (9, 11)] 
>>> sum([el[0] for (nr, el) in enumerate(l1) if nr in [3, 4]]) 
7 
>>> 
0

没有看到使用减少又一个答案。

reduce(lambda sumSoFar,(tuple0,tuple1): sumSoFar+tuple0, list, 0)

本质总和相同reduce(int.__add__, list, 0)

编辑:没有阅读的谓语部分。

容易固定,但可能不是最好的答案了:

predicate = lambda x: x == 2 or x == 4 
reduce(lambda sumSoFar,(t0,t1): sumSoFar+(t0 if predicate(t0) else 0), list, 0) 
相关问题