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

Pyhton中如何使用filter()函数?

发布时间:2023-07-01 12:29:35

filter()函数是Python内置的一个高阶函数,用于过滤列表、元组、字典、集合等可迭代对象中的元素。它接受两个参数:一个函数和一个可迭代对象。filter()函数会将可迭代对象中的每个元素传递给函数进行判断,返回结果为True的元素组成一个新的可迭代对象。

使用filter()函数的基本语法如下:

filter(function, iterable)

其中,function是一个函数,可以是Python内置的函数,也可以是自定义的函数。iterable是一个可迭代对象,如列表、元组、字典、集合等。

下面我们将详细介绍filter()函数的用法和示例。

1. 使用Python内置函数过滤列表中的元素

首先,我们可以使用Python内置的函数(如int()、str())来过滤列表中的元素。例如,我们有一个包含混合类型元素的列表,希望将其中的整数元素筛选出来。

例如,我们有一个列表numbers,其中包含了整数、浮点数和字符串元素:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, '13', '14']

现在,我们希望将其中的整数元素筛选出来,可以使用filter()函数结合内置的int()函数来实现:

integers = list(filter(lambda x: isinstance(x, int), numbers))

print(integers)

这段代码中,我们通过lambda表达式定义了一个匿名函数,函数体为isinstance(x, int),用于判断元素x是否为整数。然后使用filter()函数将numbers列表中的元素依次传递给lambda函数进行判断,并返回结果为True的元素组成的新列表。最后,通过list()函数将filter()函数返回的filter对象转换为列表输出。

运行以上代码,输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

可以看到,最终筛选出的结果只包含了整数元素。

2. 使用自定义函数过滤列表中的元素

除了使用Python内置函数,我们还可以自定义函数来过滤列表中的元素。例如,我们有一个包含多个单词的列表,希望将其中长度大于等于5的单词筛选出来。

例如,我们有一个列表words,其中包含了多个单词:

words = ['apple', 'banana', 'car', 'dog', 'elephant', 'food', 'grape']

现在,我们希望将其中长度大于等于5的单词筛选出来,可以使用filter()函数结合自定义函数来实现:

def filter_long_words(word):

    return len(word) >= 5

long_words = list(filter(filter_long_words, words))

print(long_words)

这段代码中,我们定义了一个名为filter_long_words的函数,函数体为判断word的长度是否大于等于5。然后使用filter()函数将words列表中的元素依次传递给filter_long_words函数进行判断,并返回结果为True的元素组成的新列表。最后,通过list()函数将filter()函数返回的filter对象转换为列表输出。

运行以上代码,输出结果为:

['apple', 'banana', 'elephant']

可以看到,最终筛选出的结果只包含了长度大于等于5的单词。

3. 使用lambda函数过滤列表中的元素

除了定义一个完整的函数来进行过滤外,我们还可以使用lambda表达式来定义一个匿名函数进行过滤。这在过滤逻辑简单的情况下比较方便。

例如,我们有一个包含多个数字的列表,希望将其中大于等于10的数字筛选出来。

例如,我们有一个列表numbers,其中包含了多个数字:

numbers = [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

现在,我们希望将其中大于等于10的数字筛选出来,可以使用filter()函数结合lambda表达式来实现:

greater_than_10 = list(filter(lambda x: x >= 10, numbers))

print(greater_than_10)

这段代码中,我们使用lambda表达式定义了一个匿名函数,函数体为x >= 10,用于判断元素x是否大于等于10。然后使用filter()函数将numbers列表中的元素依次传递给lambda函数进行判断,并返回结果为True的元素组成的新列表。最后,通过list()函数将filter()函数返回的filter对象转换为列表输出。

运行以上代码,输出结果为:

[10, 15, 20, 25, 30, 35, 40, 45, 50]

可以看到,最终筛选出的结果只包含了大于等于10的数字。

4. 使用filter()函数过滤字典中的元素

除了可以过滤列表中的元素,filter()函数也可以过滤字典中的元素。在过滤字典时,会返回一个包含符合过滤条件的键值对的字典。

例如,我们有一个包含学生姓名和成绩的字典,希望筛选出成绩大于等于80分的学生。

例如,我们有一个字典students,其中包含了多个学生的姓名和成绩:

students = {'John': 85, 'Mike': 70, 'Tom': 90, 'Sarah': 77, 'Emily': 95}

现在,我们希望筛选出成绩大于等于80分的学生,可以使用filter()函数结合lambda表达式来实现:

high_score_students = dict(filter(lambda x: x[1] >= 80, students.items()))

print(high_score_students)

这段代码中,我们使用lambda表达式定义了一个匿名函数,函数体为x[1] >= 80,用于判断字典中的值是否大于等于80。然后使用filter()函数将students.items()返回的键值对依次传递给lambda函数进行判断,并返回结果为True的键值对组成的新字典。最后,通过dict()函数将filter()函数返回的filter对象转换为字典输出。

运行以上代码,输出结果为:

{'John': 85, 'Tom': 90, 'Emily': 95}

可以看到,最终筛选出的结果只包含了成绩大于等于80分的学生。

总结:

以上是对filter()函数在Python中的使用方法的详细介绍。filter()函数可以方便地过滤可迭代对象中的元素,并返回符合过滤条件的新的可迭代对象。我们可以使用Python内置函数、自定义函数或者lambda表达式来对元素进行判断和过滤。filter()函数在处理大量数据、数据筛选和数据处理等场景中都非常有用。我们可以根据实际需求和具体问题,合理地使用filter()函数来简化代码和提高效率。