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

Python函数filter()的应用及其使用方法

发布时间:2023-06-14 17:09:46

Python函数filter()是Python内置函数之一,用于对一个序列进行过滤操作,返回一个满足给定条件的新序列。具体来说,它接受两个参数,第一个参数是一个函数,第二个参数是一个序列(可以是列表、元组或字符串),函数作用于序列中的每个元素,根据函数的返回值(True或False)来过滤序列,将满足条件的元素构成一个新序列返回。在实际开发中,filter()函数非常常用,可以大大简化程序逻辑,增强代码的可读性和可维护性,下面我们就来详细了解一下Python函数filter()的应用及其使用方法。

一、使用方法

filter()函数的基本用法非常简单,直接调用即可,格式如下:

filter(function, iterable)

其中,function是用来过滤序列的函数,每次接收一个参数,如果函数返回True,该参数就会被保留到新序列中,否则就被过滤掉;iterable是一个序列,可以是列表、元组或字符串等,表示要进行过滤的序列。

下面是一个示例,假如我们要从以下列表中筛选出所有的偶数:

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

输出结果为:

[2, 4, 6, 8, 10]

如上代码所示,我们首先创建了一个列表lis,里面包含了1到10这10个数字。然后我们使用lambda表达式定义了一个匿名函数,用来判断当前数是否为偶数:x%2 == 0。最后调用filter()函数,并传入这个函数对象和lis列表,它将返回一个新的序列,包含了所有满足条件的偶数。

二、常用技巧

1.使用lambda函数

除了上面的示例,我们在使用filter()函数时,通常也会用到lambda函数来代替普通函数,简化代码量(因为有时写普通函数可能比较繁琐)。例如:

# 使用普通函数
def is_odd(n):
    return n % 2 == 1
lis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd = filter(is_odd, lis)
print(list(odd))  # [1, 3, 5, 7, 9]

# 使用lambda函数
lis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd = filter(lambda x: x % 2 == 1, lis)
print(list(odd))  # [1, 3, 5, 7, 9]

上面的两段代码其实是等价的,只是使用了不同方式定义函数。

2.过滤空字符串

在处理字符串序列时,我们可能需要将空字符串过滤掉。因为空字符串并不代表着有效的数据,它只会让程序变得更加复杂,而对于某些需要保证数据一致性的情况,就需要我们将其过滤掉。例如:

lis = ['hello', '', 'world', '', 'python', '']
filtered = filter(lambda x: x.strip() != '', lis)
print(list(filtered))  # ['hello', 'world', 'python']

在代码中,我们使用了lambda函数来判断字符串是否为空,如果是,则被过滤掉,否则在新列表中保留。

3.去重

当我们需要对一个序列去重时,可以使用filter()进行实现。例如:

lis = [1,3,6,3,6,7,3,4,8,10]
unique_lis = filter(lambda x: lis.count(x) == 1, lis)
print(list(unique_lis))  # [1, 7, 4, 8, 10]

其中,我们使用了count()方法来统计lis中每个元素的个数,如果仅出现一次,则保留,否则被过滤掉。

三、总结

本文介绍了Python内置函数filter()的应用及其使用方法。filter()函数是一种非常灵活、快速而且易用的过滤器,可以大大简化程序逻辑,增强代码的可读性和可维护性。通常来说,我们可用使用lambda函数来代替普通函数,对字符串进行过滤或去重时都可以使用filter()函数。在实际开发中,对于数据处理和过滤,我们都可以借助filter()函数快速高效地完成任务。