一、filter()
filter() 是Python的内置函数,用于过滤可迭代对象,保留满足条件的元素。
1、语法
filter(function, iterable)
-
function:判断函数(返回True或False),如果为None则过滤掉所有假值 -
iterable:要过滤的可迭代对象(列表、元组、字符串等)
2、返回值
- 返回一个迭代器(filter对象) ,包含所有使函数返回
True的元素
3、案例1
过滤出偶数
def is_even(n):
return n % 2 == 0
numbers = 1, 2, 3, 4, 5, 6, 7, 8
result = filter(is_even, numbers)
print(list(result)) # 2, 4, 6, 8
4、案例2
过滤出大于5的数
numbers = 1, 3, 5, 7, 9, 11
result = filter(lambda x: x > 5, numbers)
print(list(result)) # 7, 9, 11
过滤出正数
numbers = -3, -2, 0, 1, 2, 3
result = filter(lambda x: x > 0, numbers)
print(list(result)) # 1, 2, 3
5、案例3(None)
过滤掉所有假值(False, None, 0, "", \[\], {} 等)
mixed = 0, 1, False, 2, '', 3, None, 4, \[, 5]
result = filter(None, mixed)
print(list(result)) # 1, 2, 3, 4, 5
二、filter() 和 map() 的区别
两者都是Python的内置高阶函数,但目的完全不同:
| 特性 | filter() |
map() |
|---|---|---|
| 目的 | 筛选/过滤元素 | 转换/映射元素 |
| 元素数量 | 可能减少 (过滤掉部分) | 不变 (一一对应) |
| 返回内容 | 原元素中符合条件的 | 应用函数后的新值 |
案例( 处理学生成绩**):**
scores = 85, 92, 78, 65, 88, 55, 90
map: 所有成绩加5分(元素数量不变)
adjusted = map(lambda x: x + 5, scores)
print(list(adjusted)) # 90, 97, 83, 70, 93, 60, 95
filter: 只保留及格成绩(元素减少)
passed = filter(lambda x: x >= 60, scores)
print(list(passed)) # 85, 92, 78, 65, 88, 90