如何在 Python 中使用 filter() 函数?
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 内置函数中非常实用的一个,用于筛选序列中的元素,使我们可以更加高效地处理数据。
