我正在尝试通过某些关键字过滤单词/短语列表。我发现的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/

10-12 00:12
查看更多