Python中的filter函数的作用和用法是什么?
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函数可以使代码更加简洁、清晰、易读,提高代码的可读性和可维护性。可以根据实际需求进行灵活运用。
