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

Python中filter函数的使用方法及其在实际项目开发中的应用场景

发布时间:2023-06-14 21:46:31

filter()函数是Python自带的内置函数之一,它接收两个参数:一个函数和一个可迭代对象,用于过滤掉那些不符合要求的元素,返回一个符合条件的新列表。其函数形式为:filter(function, iterable)。

使用方法:function是为过滤规则所设的一个函数,利用函数来筛选序列,true表示保留,false表示过滤掉,可迭代对象是需要过滤的序列;这个函数可以是lambda函数或定义好的函数。通过使用filter函数过滤序列时,过滤规则需要写在函数中并返回bool值来筛选可迭代对象中的元素。当然,也可以在定义函数的时候直接默认过滤掉序列中由None、0、False、空字符串等判断为False的元素。filter()函数返回的元素集合不能够直接被调用,需要list()函数将其转换为列表或遍历。

应用场景:

1.过滤掉不符合规定的字符串,只保留符合规定的元素

假设有一个字符串序列,需要通过filter函数从中筛选出长度为3的元素,可以这样实现:

string_list = ['a', 'ab', 'abc', 'abcd']
new_string_list = filter(lambda x: len(x)==3, string_list)
print(list(new_string_list)) # ['abc']

2.过滤掉0或None等无用的元素

假设有一个列表,需要过滤掉列表中的零和None元素,可以这样实现:

nums = [1, 0, None, 4, 5, None, 7, 0]
new_nums = filter(lambda x: x is not None and x != 0, nums)
print(list(new_nums)) # [1, 4, 5, 7]

3.从一个字典中过滤出符合条件的元素

假设有一个字典students,存储了学生的名字和分数信息,需要获取满分的学生姓名,可以这样实现:

students = {'xiaoming': 95, 'xiaohong': 98, 'xiaogang': 100, 'xiaolei': 88}
full_mark_students = filter(lambda x: students[x] == 100, students)
print(list(full_mark_students)) # ['xiaogang']

4.从嵌套序列中过滤出符合条件的元素

假设有一个列表,内容为列表和元组嵌套的序列,需要获取所有字母为'a'的项,可以这样实现:

nested_list = ['a', ['b', 'c'], 'd', ('a', 'b')]
new_nested_list = filter(lambda x: x == 'a' or ('a' in x), nested_list)
print(list(new_nested_list)) # ['a', ['b', 'c'], ('a', 'b')]

总之,filter()函数能够返回一个新的序列,其内部的各个元素是由原来的序列中符合迭代器条件的所有项所构成的,因此具有非常广泛的适用范围,可以方便地过滤掉不符合条件的序列,大大提高开发效率。