集合(筛选)重复

1 投票
2 回答
778 浏览
提问于 2025-04-17 08:20

我在维护一个集合,这个集合需要根据不同的条件逐渐缩小。

比如说:

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))

撰写回答