2011-12-14 140 views
1

根據各種條件,我維護一套需要逐漸縮小的設置。設置(過濾器)重複

例如:

acceptable = read_input() 
acceptable.rank_by_x() 
acceptable = set(filter(is_rank_x_top_100, acceptable)) 
acceptable.rank_by_y() 
acceptable = set(filter(is_rank_y_top_10, acceptable)) 

它的工作原理,但set(filter())結構長相醜陋。有沒有更好的方法來做到這一點?或者是更好的只是子類設置添加一個方法,做同樣的事情?

+1

`#...`做了什麼? – kennytm 2011-12-14 01:06:48

回答

2

您可能崩潰這:

acceptable = set() 
#... 
acceptable = set(filter(is_rank_y_top_10, 
         filter(is_rank_x_top_100, acceptable))) 

或者使用推導:如果你使用Python 3或Python 2.7

acceptable = set() 
#... 
acceptable = set(i for i in acceptable 
       if is_rank_x_top_100(i) and is_rank_y_top_10(i)) 
3

,您可以使用set內涵:

acceptable = {i for i in acceptable if is_rank_x_top_100(i)}