我正在尝试通过某些关键字过滤单词/短语列表。我发现的filter()
函数的所有示例都使用数字,因此我想知道这是否有可能。我知道filter()
如果它调用的函数返回True
,它将把一个项目放入结果列表。
假设我有这样的事情:
def filtCheck(item, filt):
if filt in item:
return True
def funct():
filt = 'Hi'
set1 = ['Hello, world', 'Hi there', 'Hi friend']
set2 = filter(filtCheck(filt), set1)
print set2
这是我感到困惑的地方。我将如何在set2行上写第一个参数呢?显然,由于我的filtCheck函数采用两个参数,而我仅提供一个参数,因此其编写方式不是。我也需要修改filtCheck函数吗?但是,如果我从中取出item参数,则没有字符串可以检查是否包含了filt。
最佳答案
您可以使用lambda(另请参见http://docs.python.org/2/reference/expressions.html#lambda):
set2 = filter(lambda item: filtCheck(item, 'Hi'), set1)
或者您可以使用
functools.partial
:from functools import partial
set2 = filter(partial(filtCheck, filt="Hi"), set1)
或者,您可以跳过过滤器功能,而使用list comprehension:
set2 = [item for item in set1 if filtCheck(item, "Hi")]
# or simply
set2 = [item for item in set1 if "Hi" in item]
关于python - 通过python过滤器函数传递参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19550326/