设置(过滤)重复

时间:2011-12-14 01:04:14

标签: python python-3.x

根据各种条件,我维持一套需要逐步缩小的集合。

例如:

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 个答案:

答案 0 :(得分:3)

如果您使用的是Python 3或Python 2.7,则可以使用set comprehensions:

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

答案 1 :(得分: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))