Python filter() 语法
filter() 是 Python 的一个内置函数,它用于 “过滤” 出可迭代对象中符合条件的元素,然后返回一个包含符合条件元素的新可迭代对象。
语法:
filter(function, iterable)说明:
filter() 函数接收 2 个参数。
function(必选):是一个可调用对象(比如函数、lambda 表达式),用于判断元素是否保留。当值为 None 时,自动过滤假值。iterable(必选):是一个可迭代对象(比如列表、元组、集合等)。
filter(function, iterable) 便是把 iterable 中每一个元素依次传入 function 进行 “判断”。如果 function 返回 True,则保留该元素;如果 function 返回 False,则丢弃该元素。
filter() 函数最终会返回一个新的可迭代对象,然后你可以使用 list() 函数将这个可迭代对象转化为一个列表。
Python filter() 摘要
| 使用频率 | 高 |
|---|---|
| 时间复杂度 | O(1) |
| 官方文档 | 查看 |
Python filter() 示例
接下来,我们通过几个简单的例子来讲解一下 Python filter() 函数是如何使用的。
示例 1:filter() 基本用法
# 定义函数
def fn(n):
return n > 10
# 定义可迭代对象
items = [3, 9, 1, 14, 50, 21]
# 调用 filter() 函数
result = filter(fn, items)
print(list(result))运行结果如下。
[14, 50, 21]分析:
上面例子使用 filter() 函数过滤出所有大于 10 的数字,然后返回这些数字组成的列表。
示例 2:filter() 结合 lambda 表达式
# 定义可迭代对象
items = [3, 9, 1, 14, 50, 21]
# 调用 filter() 函数,并使用 lambda 表达式
result = filter(lambda x: x > 10, items)
print(list(result))运行结果如下。
[14, 50, 21]分析:
lambda 表达式在 Python 中非常重要。实际上,下面 2 种方式是等价的。相比之下,列表推导式可读性更强。
# filter 方式
result = filter(lambda x: x>10, items)
# 列表推导式
result = [x for x in items if x>10]filter() 实际应用
filter() 函数在实际开发很有用,我们通过几个例子来看看 filter() 是怎样使用的。
示例 3:filter() 获取 0~100 之间的所有奇数
# 定义一个函数
def is_odd_number(n):
return n % 2 != 0
# 定义一个可迭代对象
items = range(0, 101, 1)
# 调用 filter() 函数
result = filter(is_odd_number, items)
print(list(result))运行结果如下。
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]分析:
对于上面示例来说,下面两种方式其实是等价的。
# 方式 1
def is_odd_number(n):
return n % 2 != 0
# 方式 2
def is_odd_number(n):
if n % 2 != 0:
return True
else:
return False示例 4:filter() 筛选出属于字符串类型的元素
# 定义一个函数
def findstr(n):
return isinstance(n, str)
# 定义一个可迭代对象
items = [1001, 'Python', 6666, 'Java', 2024]
# 调用 filter() 函数
result = filter(findstr, items)
print(list(result))运行结果如下。
['Python', 'Java']示例 5:filter() 去除所有值为假的元素
items = ['Python', False, None, 0, '', (), [], {}, 'Java']
result = filter(None, items)
print(list(result))运行结果如下。
['Python', 'Java']分析:
filter(None, iterable) 是一个空值过滤小技巧,它可以用于快速过滤空值,包括:
- False。
- None。
- 0。
- 空字符串。
- 空容器。
