【发布时间】:2017-11-01 15:38:16
【问题描述】:
我想编写一个方法来过滤给定的对象列表,具体取决于提供的过滤器或函数。
现在我的方法是这样的:
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 运算符,所以我需要将in 与not 结合起来,这有点笨拙。
我正在考虑像这样使用 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,即使我只需要不同的运算符,我也总是需要指定整个函数。
【问题讨论】:
-
我不太明白你想要什么。 lambda 函数 是 运算符,不是吗?还是您的意思是“不在”替换“在”?是的,您可以对其进行参数化,但这可能比您想要的更麻烦。您希望该功能有多通用?您需要什么范围的控制?
-
@Prune 控制操作员会很好(如
innot in等)。使用 lambda,它可能是通用的,因为我可能不需要那么多控制。
标签: python python-2.7 filter list-comprehension