Python filter函数的用法及实现方式
Python filter函数是一个内置的函数,这个函数可以从一个序列中过滤出符合条件的元素,并返回一个迭代器对象。
filter()函数的用法
filter()函数的语法非常简单,它使用一个可调用对象和一个可迭代的对象做为参数,其中可调用对象是一个函数或一个Lambda表达式,函数或Lambda表达式只能有一个参数,返回值必须是一个布尔值True或False,可迭代对象可以是任何有序的序列(列表、元组、字符串)或不可变的集合(集合、字典、frozenset)。
函数签名如下:
filter(function or None, iterable)
参数说明:
- function : 这是一个可选参数,可以是一个函数或Lambda表达式,用于对传入的可迭代对象取过滤操作(筛选出符合条件的元素),如果传入None,则默认过滤掉所有的False值
- iterable: 这是一个必选参数,指的是需要进行过滤的可迭代对象,可以是列表、元组、字符串、集合、字典等
返回值
filter()函数返回的是一个迭代器对象,这个迭代器对象里面包含的是所有符合函数或Lambda表达式条件的元素。
filter()函数的实现方式
我们可以通过Python代码来手动实现filter()函数的功能。下面是一个示例:
def my_filter(func, iterable):
if func is None:
# 默认过滤掉所有的False值
func = bool
for item in iterable:
if func(item):
yield item
代码解释:
- 函数my_filter()接收两个参数: 个参数func表示需要用来过滤元素的函数或Lambda表达式,第二个参数iterable表示需要进行过滤的序列对象
- 如果func为None,则默认过滤掉所有的False值,这里我们使用的是内置函数bool来判断元素的True或False值,并将其作为过滤条件
- 通过for循环来遍历序列对象,将符合过滤条件的元素使用yield关键字返回
使用自定义的my_filter()函数和Python内置的filter()函数效果相同,如下:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 使用自定义的my_filter()函数 results = my_filter(lambda x: x % 2 == 0, my_list) print(list(results)) # 使用Python内置的filter()函数 results = filter(lambda x: x % 2 == 0, my_list) print(list(results))
输出结果:
[2, 4, 6, 8] [2, 4, 6, 8]
可以看出,使用自定义的my_filter()函数和Python内置的filter()函数都可以实现过滤出所有偶数元素的效果。自定义的my_filter()函数使用yield实现了迭代器对象的生成,而Python内置的filter()函数则是直接返回一个迭代器对象。
