2016-04-04 68 views
0

說我有兩個X的數組,並需要把他們通過一個過濾器,然後在結果變換每個項目分爲伊蘇如何過濾理解結果?

數組
[for (x of Xs) if (condition(x)) transform(x)] 

但後來我還有一個過濾器,依賴於結果第一個過濾器,例如只返回在2個標準偏差範圍內的已過濾陣列中的項目

我該怎麼做?

+0

我想你的問題不太清楚。你能用不同的詞來解釋嗎? – RafaelC

+2

你的意思是'[如果條件(x)]'在xs中變換x(x)'? – TigerhawkT3

+5

試着先用傳統的循環寫你的算法。看到一個工作算法可以在重構它(如果需要的話)中非常有幫助。 – TigerhawkT3

回答

2

然後,這樣做的方法是嵌套幾個理解或生成器表達式。你可以用一個複雜的表達來完成整個事情,但如果你把它們分開,它可以更清楚。

舉例來說,如果你想與一個transform功能轉換列表的價值,並希望過濾掉一些值(基於轉換後的結果,而不是原來的輸入),你可以使用:

result = [x for x in (transform(y) for y in some_iterable) if condition(x)] 

transform_gen = (transform(y) for y in some_iterable) 
filtered_list = [x for x in transform_gen if condition(x)] 

當然,你可以添加你需要的嵌套許多額外的層。