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

时间:2015-11-26 17:56:02

标签: python filter set

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

  1. 删除重复项
  2. 按特定条件删除所有元素,确切地说,我想删除大于某个值的所有元素。
  3. 我想我可以使用2的过​​滤器而不是使用set来实现1

    之类的东西
    list(set(filter(lambda x:x<C, l)))
    

    有更好/更pythonic /更有效的方式吗?

3 个答案:

答案 0 :(得分:20)

使用list comprehension可能更多&#34; pythonic&#34;。

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

答案 1 :(得分:6)

最好的两种方法是过滤:

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

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

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

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

答案 2 :(得分:0)

在我看来,最可能的过滤集合的方法是使用集合操作(​​Venn图):

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}