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

Python filter函数的用法及实现方式

发布时间:2023-06-13 11:32:39

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()函数则是直接返回一个迭代器对象。