通过Python过滤函数传递一个参数

2024-04-23 10:45:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用一些关键字过滤单词/短语列表。我发现的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行写第一个参数?显然不是这样写的,因为filtercheck函数需要两个参数,而我只提供了一个。我也需要修改我的filtCheck函数吗?但是如果我去掉item参数,就没有字符串来检查filt是否在。在


Tags: 函数true示例列表参数def关键字hi
3条回答

你可以用咖喱:

def filtCheck(filt):
    return lambda item: filt in item

def funct():
    filt = 'Hi'
    set1 = ['Hello, world', 'Hi there', 'Hi friend']
    set2 = filter(filtCheck(filt), set1)
    print set2

您可以使用lambda(另请参见http://docs.python.org/2/reference/expressions.html#lambda):

set2 = filter(lambda item: filtCheck(item, 'Hi'), set1)

或者您可以使用^{}

^{pr2}$

或者您可以跳过过滤器函数,使用list comprehension

set2 = [item for item in set1 if filtCheck(item, "Hi")]

# or simply

set2 = [item for item in set1 if "Hi" in item]

更容易切换到列表组件:

filt = 'Hi'
set1 = ['Hello, world', 'Hi there', 'Hi friend']
set2 = [greeting for greeting in set1 if filt in greeting]

相关问题 更多 >