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

Python中的filter函数的作用和用法是什么?

发布时间:2023-06-02 11:15:51

filter函数是Python中内置函数之一,用于筛选传入的可迭代对象中符合指定条件的元素,并返回一个由符合条件元素构成的新的可迭代对象。

filter函数的语法为:

filter(function, iterable)

参数解释:

? function:表示指定的筛选条件的函数,该函数接受单个参数,并返回一个布尔值(True或False),True表示该元素符合条件,False表示该元素不符合条件。

? iterable:表示要进行筛选的可迭代对象,可以是列表、元组、集合等,但必须是可迭代对象。

filter函数的详细用法

接下来将从以下几个方面介绍filter函数的详细用法:

? 筛选列表中的偶数

? 筛选含非空字符串的列表元素

? 筛选字典中某个字段的值满足条件的元素

? 使用lambda表达式作为筛选条件

? 使用filter函数对多个可迭代对象进行筛选

1. 筛选列表中的偶数

例如,我们有一个列表,要从中筛选出所有偶数,可以使用如下代码:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = list(filter(lambda x: x % 2 == 0, nums))
print(even_nums)

以上代码中,lambda表达式用于筛选偶数,其中 x 表示列表中的每个元素,x % 2 == 0 表示筛选条件(即x为偶数),filter函数则用于筛选符合条件的元素,并将它们组成一个新的可迭代对象,最后用list函数将它转换为列表输出。

输出结果为:

[2, 4, 6, 8, 10]

2. 筛选含非空字符串的列表元素

例如,我们有一个列表,要从中筛选出所有含有非空字符串的元素,可以使用如下代码:

words = ['hello', '', 'world', '', ' ', 'python']
nonempty_words = list(filter(lambda x: x != '' and x.strip() != '', words))
print(nonempty_words)

以上代码中,lambda表达式用于筛选非空字符串的元素,其中 x 表示列表中的每个元素,x != '' and x.strip() != '' 表示筛选条件(即x不为空或空格),filter函数则用于筛选符合条件的元素,并将它们组成一个新的可迭代对象,最后用list函数将它转换为列表输出。

输出结果为:

['hello', 'world', 'python']

3. 筛选字典中某个字段的值满足条件的元素

例如,我们有一个字典列表,要从中筛选出 "age" 字段的值为大于20的元素,可以使用如下代码:

people = [
    {"name": "Lucy", "age": 18},
    {"name": "Tom", "age": 30},
    {"name": "Marry", "age": 25},
    {"name": "Jack", "age": 19},
    {"name": "Kevin", "age": 22}
]
filtered_people = list(filter(lambda p: p["age"] > 20, people))
print(filtered_people)

以上代码中,lambda表达式用于筛选 "age" 字段的值大于20的元素,其中 p 表示字典列表中的每个元素,p["age"] > 20 表示筛选条件(即 age 字段的值大于20),filter函数则用于筛选符合条件的元素,并将它们组成一个新的可迭代对象,最后用list函数将它转换为列表输出。

输出结果为:

[{'name': 'Tom', 'age': 30}, {'name': 'Marry', 'age': 25}, {'name': 'Kevin', 'age': 22}]

4. 使用lambda表达式作为筛选条件

在上面的例子中,我们多次使用了lambda表达式作为filter函数的 个参数。事实上,也可以将lambda表达式保存在变量中,再将该变量作为filter函数的参数。例如,我们可以将判断列表中元素是否为正数的lambda表达式保存在变量positive中,然后将positive作为filter函数的 个参数。代码如下:

nums = [1, -2, -3, 4, -5, 6, -7, 8, 9, -10]
positive = lambda x: x > 0
positive_nums = list(filter(positive, nums))
print(positive_nums)

输出结果为:

[1, 4, 6, 8, 9]

5. 使用filter函数对多个可迭代对象进行筛选

有时候,我们需要对多个可迭代对象进行筛选,并且筛选条件不同。这时候,我们可以使用filter函数配合zip函数使用。zip函数用于将多个可迭代对象对应位置上的元素打包成元组,然后返回一个zip对象,该zip对象也是一个可迭代对象。例如,我们有两个列表,一个用于存储学生姓名,另一个用于存储学生成绩,我们需要筛选出所有成绩在60分以上的学生及其对应的姓名,代码如下:

names = ['Lucy', 'Tom', 'Marry', 'Jack', 'Kevin']
scores = [85, 60, 75, 55, 92]
passed_students = list(filter(lambda x: x[1] >= 60, zip(names, scores)))
print(passed_students)

以上代码中,lambda表达式用于筛选成绩在60分以上的学生,其中 x 表示可迭代对象zip(names, scores)中的每个元素,x[1] >= 60 表示筛选条件(即x[1]表示学生成绩,要求大于等于60分),filter函数则用于筛选符合条件的元素,并将它们组成一个新的可迭代对象,最后用list函数将它转换为列表输出。

输出结果为:

[('Lucy', 85), ('Tom', 60), ('Marry', 75), ('Kevin', 92)]

总结

filter函数是Python中常用的函数之一,它可以对传入的可迭代对象进行筛选,根据指定的筛选条件,返回符合条件的元素构成的新的可迭代对象。使用filter函数可以使代码更加简洁、清晰、易读,提高代码的可读性和可维护性。可以根据实际需求进行灵活运用。