gpt4 book ai didi

Python - 用于列表理解的动态过滤器?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:23 25 4
gpt4 key购买 nike

我想写一个方法来过滤给定的对象列表,这取决于提供过滤的运算符或函数。

现在我的方法是这样的:

def filter_by_names(objects, names, exclude=False):
if exclude:
return [obj for obj in objects if obj.name not in names]
else:
return [obj for obj in objects if obj.name in names]

现在它有两个过滤器选项,如果其名称在提供的名称列表中则返回对象,或者相反:返回名称不在提供的名称列表中的对象。

我想要的是能够动态指定如何过滤。我虽然使用 operator 库,但似乎没有 not in 运算符,所以我需要将 innot 这有点笨拙。

我想像这样使用 lambda:

def filter_by_names(objects, names, fun=lambda obj, names: obj.name in names):
return [obj for obj in objects if fun(obj, names)]

这个可行,但我想知道是否有更好的方法来做类似的事情?使用 lambda,我总是需要指定整个函数,即使我只需要不同的运算符也是如此。

最佳答案

如何使用 xor运算符,例如

>>> n = range(0,11,2)
>>> n
[0, 2, 4, 6, 8, 10]
>>> exclude = True
>>> [ x for x in range(10) if (x in n) ^ exclude ] # only the one that are not in n
[1, 3, 5, 7, 9]
>>> exclude = False
>>> [ x for x in range(10) if (x in n) ^ exclude ] # only the one that are also in n
[0, 2, 4, 6, 8]
>>>

之所以可行,是因为 equals 的异或结果为 false,different 的异或结果为 true

关于Python - 用于列表理解的动态过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44291429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com