跳到主要内容

Python filter() 函数

filter() 函数根据函数的输出从可迭代对象(如列表、元组等)中选择元素。

该函数应用于可迭代对象的每个元素,如果返回 True,则该元素被 filter() 函数选择。

示例

# 如果传入的参数是偶数,则返回 True
def check_even(number):
if number % 2 == 0:
return True
return False

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 如果传递给 check_even() 的元素返回 True,则选择它
even_numbers_iterator = filter(check_even, numbers)

# 转换为列表
even_numbers = list(even_numbers_iterator)

print(even_numbers)

# 输出:[2, 4, 6, 8, 10]

filter() 语法

filter() 的语法是:

filter() 参数

filter() 函数接受两个参数:

  • function - 一个函数
  • iterable - 一个可迭代对象,如 sets, lists, tuples 等。

filter() 返回值

filter() 函数返回一个迭代器。

注意: 您可以轻松地将迭代器转换为序列,如列表、元组、字符串等。

示例 1:filter() 的工作原理

letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o']

# 一个函数,如果字母是元音则返回 True
def filter_vowels(letter):
vowels = ['a', 'e', 'i', 'o', 'u']
return True if letter in vowels else False

filtered_vowels = filter(filter_vowels, letters)

# 转换为元组
vowels = tuple(filtered_vowels)
print(vowels)

输出

('a', 'e', 'i', 'o')

这里,filter() 函数从 letters 列表中提取出元音字母。以下是这段代码的工作原理:

  • letters 列表的每个元素都传递给了 filter_vowels() 函数。
  • 如果 filter_vowels() 返回 True,那么该元素被提取出来,否则被过滤掉。

注意: 也可以使用循环来过滤列表,但使用 filter() 函数更加简洁。

示例 2:在 filter() 内使用 Lambda 函数

numbers = [1, 2, 3, 4, 5, 6, 7]

# lambda 函数对偶数返回 True
even_numbers_iterator = filter(lambda x: (x%2 == 0), numbers)

# 转换为列表
even_numbers = list(even_numbers_iterator)

print(even_numbers)

输出

[2, 4, 6]

这里,我们直接在 filter() 内传递了一个 lambda 函数

我们的 lambda 函数对偶数返回 True。因此,filter() 函数返回一个仅包含偶数的迭代器。

示例 3:在 filter() 内使用 None 作为函数

# 随机列表
random_list = [1, 'a', 0, False, True, '0']

filtered_iterator = filter(None, random_list)

# 转换为列表
filtered_list = list(filtered_iterator)

print(filtered_list)

输出

[1, 'a', True, '0']

None 用作 filter() 函数的第一个参数时,所有真值(如果转换为布尔值则为 True)的元素都被提取出来。