2011-01-11 74 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) 
相關問題