我有一个由替代元素组成的列表,我想做两件事:
- 删除重复项
- 根据特定标准删除所有元素,确切地说,我想删除大于某个值的所有元素。
我认为我可以使用过滤器来实现第2步,然后使用集合来实现第1步
list(set(filter(lambda x:x<C, l)))
有没有更好/更符合Python风格/更高效的方法?
for x in set(lst)
会在将列表转换为集合后创建一个迭代器,然后列表解析会遍历它并在x < C
时存储值。 - Delganlist()
包装集合理解起来更清晰。然而,这并没有太大的区别,由你来决定。 - Delgan最好的两种方法是使用过滤器:
new_list = list(set(filter(lambda x:x<C, l)))
list({x for x in l if x < C})
但我猜,如果你熟悉过滤器,你可以直接使用它。
在我看来,尽可能使用集合操作(维恩图)过滤集合是最具Python特色的方式:
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的值,您只需键入“包含检查”运算符“in”,在Python代码中执行sets.contains()魔术方法(魔术方法不应该直接调用,这就是为什么使用“in”的原因):
{x for x in l if x > C}