Python 的内置函数 filter() 是一个非常有用的高阶函数,它用于过滤序列中的元素。该函数接收两个参数:一个函数和一个可迭代对象,返回一个迭代器,其中包含使得函数返回值为 True 的所有元素。
详细说明
语法
filter(function, iterable)
function:用于测试每个元素的函数。如果为None,则直接返回iterable中为 True 的元素。iterable:需要过滤的可迭代对象(如列表、元组、字符串等)。
返回值
工作原理
filter() 会对 iterable 中的每个元素应用 function,如果 function 返回 True,则该元素会被保留在结果中;否则被过滤掉。
示例
示例 1:过滤偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_even(n):
return n % 2 == 0
filtered_numbers = filter(is_even, numbers)
print(list(filtered_numbers)) # 输出: [2, 4, 6, 8, 10]
示例 2:使用 lambda 函数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filtered_numbers)) # 输出: [2, 4, 6, 8, 10]
示例 3:过滤 None 或空值
values = [0, 1, '', 'hello', None, False, True]
filtered_values = filter(None, values)
print(list(filtered_values)) # 输出: [1, 'hello', True]
示例 4:过滤字符串中的非字母字符
text = "Hello, 123 World!"
filtered_text = filter(lambda x: x.isalpha(), text)
print(''.join(filtered_text)) # 输出: "HelloWorld"
应用场景
- 数据清洗:过滤掉不符合条件的数据(如无效值、异常值)。
- 条件筛选:从列表中提取满足特定条件的元素。
- 字符串处理:过滤掉不需要的字符或子字符串。
- 函数式编程:与其他高阶函数(如
map()、reduce())结合使用,实现更复杂的逻辑。
注意事项
替代方案(列表推导式)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = [x for x in numbers if x % 2 == 0]
print(filtered_numbers) # 输出: [2, 4, 6, 8, 10]
随时随地看视频