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

如何在 Python 中使用 filter() 函数?

发布时间:2023-06-05 21:34:21

filter()函数是 Python 内置函数之一,可用于筛选序列中的元素。它需要两个参数:一个是函数对象,另一个是可迭代的序列。在执行过程中,过滤函数对序列元素逐个执行,只有函数返回True时,该元素才会被保留到新序列中。

filter() 函数的语法如下:

filter(function, iterable)

其中,function 是过滤函数,iterable 是要过滤的序列。在执行过程中,function 每次会接收一个参数,该参数是迭代器 iterable 当前返回的元素。如果 function 返回 True,则该元素将被保留到新的序列中。如果 function 返回 False,则该元素将被过滤掉,不会保留到新序列中。

接下来我们通过以下几个例子来看看 filter() 函数的用法。

例1:过滤负数

下面这个示例代码用 filter() 函数过滤了一个整数序列中的所有负数,只保留了正数。其中,过滤函数 f(i) 判断元素 i 是否大于等于 0。

data = [1, -2, 3, -4, 5, -6, 7, -8, 9]
result = filter(lambda i: i >= 0, data)
print(list(result))

输出结果为:[1, 3, 5, 7, 9]

例2:过滤 None

在下面的示例中,我们使用 filter() 和 lambda 表达式过滤掉了一个列表中的 None 值。

data = [1, None, 3, None, 5, None, 7, None, 9]
result = filter(lambda x: x is not None, data)
print(list(result))

输出结果为:[1, 3, 5, 7, 9]

例3:过滤出含有元音字母的单词

下面这个示例代码用 filter() 函数过滤了一个字符串列表中的所有不含元音字母的单词,只保留了含有元音字母的单词。其中,过滤函数 f(s) 判断单词 s 中是否含有元音字母。

data = ['apple', 'banana', 'pear', 'orange', 'grape']
vowels = set('aeiou')
result = filter(lambda s: any(v in vowels for v in s), data)
print(list(result))

输出结果为:['apple', 'banana', 'pear', 'orange']

注意点:

- filter() 函数返回的是一个迭代器,需要使用 list() 函数将其转成列表形式。

- 过滤函数可以是任意可以接受一个参数并返回 True 或 False 值的函数。

- 在过滤函数中可以使用任意表达式实现逻辑,比如使用 and, or 关键字连接表达式。

- 可以使用一些内置函数和库函数作为过滤函数,比如 isdigit(), isalpha() 等,以实现针对不同数据类型的过滤。

综上所述,filter() 函数是 Python 内置函数中非常实用的一个,用于筛选序列中的元素,使我们可以更加高效地处理数据。