Python Filter函数
在Python的函数式编程工具箱中,filter()
函数是一个强大而实用的工具,它允许我们从可迭代对象中筛选出符合特定条件的元素。本文将详细介绍filter()
函数的用法、语法和应用场景,帮助你掌握这一重要的函数式编程工具。
什么是filter()函数?
filter()
函数是Python内置的高阶函数,用于从可迭代对象(如列表、元组或字符串)中筛选出满足特定条件的元素。它接受一个函数和一个可迭代对象作为参数 ,返回一个迭代器,该迭代器包含所有使函数返回True
的元素。
基本语法
filter(function, iterable)
其中:
function
:一个函数,用于测试每个元素。如果函数返回True
,则元素被保留;如果返回False
,则元素被过滤掉。iterable
:一个可迭代对象,如列表、元组等。
备注
如果function
参数为None
,则filter()
将返回iterable
中所有计算为True的元素(相当于使用bool
函数作为过滤条件)。
filter()函数基本用法
示例1:过滤列表中的偶数
# 定义一个检查偶数的函数
def is_even(num):
return num % 2 == 0
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(is_even, numbers))
print("原始列表:", numbers)
print("偶数列表:", even_numbers)
输出:
原始列表: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
偶数列表: [2, 4, 6, 8, 10]
示例2:使用lambda表达式
我们也可以使用lambda表达式作为filter()
的第一个参数,这在简单条件下非常方便:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd_numbers = list(filter(lambda x: x % 2 != 0, numbers))
print("原始列表:", numbers)
print("奇数列表:", odd_numbers)
输出:
原始列表: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
奇数列表: [1, 3, 5, 7, 9]
示例3:使用None作为函数参数
当我们使用None
作为函数参数时,filter()
会返回所有计算为True
的元素:
mixed_list = [0, 1, False, True, '', 'hello', [], [1, 2], None, 42]
truthy_values = list(filter(None, mixed_list))
print("原始列表:", mixed_list)
print("True值列表:", truthy_values)
输出:
原始列表: [0, 1, False, True, '', 'hello', [], [1, 2], None, 42]
True值列表: [1, True, 'hello', [1, 2], 42]
filter()的工作原理
下面是filter()
函数的工作流程图:
需要注意的是,filter()
返回的是一个迭代器,而不是列表。如果需要列表形式的结果,需要使用list()
函数进行转换。