过滤集合的最 Pythonic 方法是什么?
What is the most Pythonic way to filter a set?
我有包含替换项的列表,我想做两件事:
- 删除重复项
- 根据特定条件删除所有元素,准确地说我想删除所有大于某个值的元素。
我想我可以对 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}
我有包含替换项的列表,我想做两件事:
- 删除重复项
- 根据特定条件删除所有元素,准确地说我想删除所有大于某个值的元素。
我想我可以对 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}