滤除一组的最Pythonic方法是什么?

Men*_*eni 14 python set filter

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

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

我想我可以使用filter for 2而不是使用set来实现1之类的东西

list(set(filter(lambda x:x<C, l)))
Run Code Online (Sandbox Code Playgroud)

是否有更好/更pythonic /更有效的方式?

Del*_*gan 21

使用列表理解可能更"pythonic".

filtered = [x for x in set(lst) if x < C]
Run Code Online (Sandbox Code Playgroud)

  • @Meni绝对没有.`for set in set(lst)`在将列表转换为集合之后创建一个迭代器,然后列表解析通过它迭代并存储值,如果`x <C`. (4认同)

Y2H*_*Y2H 6

最好的两种方法是过滤:

new_list = list(set(filter(lambda x:x<C, l)))
Run Code Online (Sandbox Code Playgroud)

或设置理解(许多人会考虑更多pythonic,甚至更有效):

list({x for x in l if x < C})
Run Code Online (Sandbox Code Playgroud)

但我想,如果你熟悉过滤器,你可以坚持下去.


Hub*_*dek 5

在我看来,过滤集合的最 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) 
Run Code Online (Sandbox Code Playgroud)

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

A - {5,}
Run Code Online (Sandbox Code Playgroud)

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

{x for x in l if x > C}
Run Code Online (Sandbox Code Playgroud)