集合(筛选)重复
我在维护一个集合,这个集合需要根据不同的条件逐渐缩小。
比如说:
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())
这个写法看起来不太好。有没有更好的方法?或者说,直接继承集合类,添加一个方法来实现同样的功能是不是更好?
2 个回答
3
如果你在使用Python 3或者Python 2.7,你可以使用集合推导式:
acceptable = {i for i in acceptable if is_rank_x_top_100(i)}
2
你可以把这个简化成:
acceptable = set()
#...
acceptable = set(filter(is_rank_y_top_10,
filter(is_rank_x_top_100, acceptable)))
或者使用列表推导式:
acceptable = set()
#...
acceptable = set(i for i in acceptable
if is_rank_x_top_100(i) and is_rank_y_top_10(i))