Python filter()

filter() 函数根据函数的结果从可迭代对象中选择元素。

示例

# returns True if the argument passed is even
def check_even(number):
    if number % 2 == 0:
          return True  
    return False

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

# if an element passed to check_even() returns True, select it even_numbers_iterator = filter(check_even, numbers)
# converting to list even_numbers = list(even_numbers_iterator) print(even_numbers) # Output: [2, 4, 6, 8, 10]

filter() 语法

filter(function, iterable)

filter() 参数

该函数接受两个参数

  • function - 对可迭代对象的每个项运行的函数
  • iterable - 需要过滤的序列,例如集合列表元组

filter() 返回值

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


示例:从列表中过滤元音

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

# a function that returns True if letter is vowel
def filter_vowels(letter):
    vowels = ['a', 'e', 'i', 'o', 'u']
    if letter in vowels:
        return True 
    else:
        return False

# selects only vowel elements filtered_vowels = filter(filter_vowels, letters)
# converting to tuple vowels = tuple(filtered_vowels) print(vowels) # Output: ('a', 'e', 'i', 'o')

上述程序的工作原理如下:

  • letters 的每个元素都传递给 filter_vowels() 函数
  • 如果 filter_vowels() 返回 True,则 filter() 选择该元素

注意:这里,程序返回迭代器,我们使用 vowels = tuple(fitered_vowels) 将其转换为元组。

更多关于 Python filter()

Python filter() 与 Lambda

我们还可以将 Python filter() 函数与lambda 函数一起使用。例如,

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

# the lambda function returns True for even numbers even_numbers_iterator = filter(lambda x: (x%2 == 0), numbers)
# converting to list even_numbers = list(even_numbers_iterator) print(even_numbers) # Output: [2, 4, 6]

在上面的示例中,lambda 函数仅对偶数返回 True。因此,filter() 函数返回一个仅包含偶数的迭代器。

在 filter() 中使用 None 作为函数

None 作为 filter() 函数的第一个参数使用时,它会提取所有在转换为布尔值时评估为 True 的元素。例如,

random_list = [1, 'a', 0, False, True, '0']
filtered_iterator = filter(None, random_list)

# converting to list
filtered_list = list(filtered_iterator)

print(filtered_list)

# Output: [1, 'a', True, '0']

这里,1'a'True'0' 在转换为布尔值时被认为是 True

另请阅读

视频:Python map() 和 filter()

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战