带变量的Python filter()对象列表

2024-10-03 13:30:49 发布

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

我有一个一般性的问题,我在python中使用列表理解已经有一段时间了,但是我遇到了filter(),在这里可以传入一个定义的函数来过滤对象列表。你知道吗

filteredList = filter(filterfunction, listOfItemsToFilter)

是否也可以传入要测试的属性?你知道吗

class testObject(object):
    def __init__(self, att1="", att2="", att3=""):
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3

def t_filter_function(item):
    if item.att2 == 'item 2':
        return True
    else:
        return False

def printer(list):
    for item in list:
        print(item.att1, item.att2, item.att2)

def main():
    testObjectList = []
    testObjectList.append(testObject(att1='1', att2='item 1', att3='a'))
    testObjectList.append(testObject(att1='2', att2='item 2', att3='b'))
    testObjectList.append(testObject(att1='3', att2='item 2', att3='c'))

    printList = filter(t_filter_function, testObjectList)

    printer(printList)

main()

我想做的是扩展函数t\u filter\u function(),这样我就可以传入一个变量,这样我就可以测试att2的任何值

printList = filter(t_filter_function('item 2', testObjectList), testObjectList)

Tags: 函数self列表returndeffunctionfilteritem
2条回答

有几个选择。您可以创建一个新函数,该函数接受列表和目标,并筛选与该目标匹配的项:

 def filter_to_target(target,starting_list):
     return filter(lambda x: x == target, starting_list)

您可以创建一个函数,返回一个检查与目标相等的函数,然后在filter中使用该函数:

def get_filter_function(target):
    return lambda x: x == target

filter(get_filter_function(target),starting_list)

您可以修改t_filter_function以获取一个附加参数,该参数将是您要测试的属性值:

def t_filter_function(item,attr):
    if item.att2 == attr:
        return True
    else:
        return False

然后可以修改filter函数:

printList = filter(lambda elem: t_filter_function(elem,'item 2'), testObjectList)

相关问题 更多 >