过滤集合的最 Pythonic 方法是什么?

What is the most Pythonic way to filter a set?

我有包含替换项的列表,我想做两件事:

  1. 删除重复项
  2. 根据特定条件删除所有元素,准确地说我想删除所有大于某个值的元素。

我想我可以对 2 使用 filter 而不是使用 set 来实现 1 像

list(set(filter(lambda x:x<C, l)))

有没有better/morepythonic/more有效的方法?

使用 list comprehension 可能更 "pythonic"。

filtered = [x for x in set(lst) if x < C]

最好的两种方法是过滤:

new_list = list(set(filter(lambda x:x<C, l)))

或集合推导式(许多人会认为它更像 pythonic,甚至更高效):

list({x for x in l if x < C})

但我想,如果您熟悉过滤器,那么您可以坚持使用它。

在我看来,过滤集合最 Pythonic 的方法,只要有可能,就是使用集合操作(​​维恩图):

A = {0, 1, 4, 5, 8}; 
B = {2, 1, 3, 4, 6}; 

print("Union :", A | B) 

print("Intersection :", A & B) 

print("Difference :", A - B) 

print("Symmetric difference :", A ^ B) 

另一个示例,当您只想从集合 A 中删除值 5 时,您只需键入:

A - {5,}

并且在这个问题中,如果您需要过滤比 C 更大的值,您只需键入 "containment check" 运算符 "in",它在 Python 代码中执行集合。包含() 魔术方法(不应直接调用魔术方法,这就是您使用 "in" 的原因):

{x for x in l if x > C}