欢迎访问宙启技术站
智能推送

如何使用Pythonfilter函数过滤数据

发布时间:2023-06-26 16:48:35

Python中内置的filter函数可以对一个序列进行过滤操作,返回满足条件的元素集合,其最基本的用法是以一个函数和一个序列作为参数,返回一个迭代器。

filter函数的参数分别为一个函数和一个可迭代对象,该函数的返回值为True或False表示该元素是否保留。filter函数返回一个可迭代器,其中包含了符合条件的元素。可以对原序列进行过滤操作,返回符合条件的元素序列。

示例:

假设有以下列表:

    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

现在需要保留列表中所有大于5的元素,可以使用filter函数进行过滤。

    result = list(filter(lambda x: x > 5, lst))

这里使用了lambda表达式来定义过滤函数,返回大于5的元素。函数的返回值为True或False,filter函数根据该返回值判断是否保留该元素。最后使用list函数将过滤之后的结果转化为列表类型。

输出结果:

    [6, 7, 8, 9, 10]

使用filter函数可以对输入进行一些复杂的筛选,包括基础类型、自定义对象、元组等等。

示例1:

设有列表:

    strs = ['apple', 'orange', 'grape', 'banana', 'peach', 'pineapple']

要求保留长度大于5的字符串元素。

    result = list(filter(lambda x: len(x) > 5, strs))

输出结果:

    ['orange', 'pineapple']

示例2:

设有一个学生类定义:

    class Student:

        def __init__(self, name, age, score):

            self.name = name

            self.age = age

            self.score = score

        def __str__(self):

            return f"{self.name}, {self.age}, {self.score}"

现在需要按照成绩,保留大于90分的学生。

    students = [

        Student('Tom', 18, 87),

        Student('Jerry', 19, 92),

        Student('Lucy', 17, 95),

        Student('Amy', 20, 89)

    ]

    result = list(filter(lambda s: s.score > 90, students))

输出结果:

    [Jerry, 19, 92, Lucy, 17, 95]

示例3:

假设有一个元组列表:

    tuples = [(1, 2), (3, 4), (5, 6), (7, 8)]

现在需要保留元组中第一个元素大于2的项:

    result = list(filter(lambda t: t[0] > 2, tuples))

输出结果:

    [(3, 4), (5, 6), (7, 8)]

总之,Python内置的filter函数可以方便地对数据进行筛选与过滤。通过灵活的Lambda表达式定义,可以使其适用于包括基础类型、自定义对象、元组等不同类型的结构。