Python filter() 函数

Python filter() 语法

filter() 是 Python 的一个内置函数,它用于 “过滤” 出可迭代对象中符合条件的元素,然后返回一个包含符合条件元素的新可迭代对象。

语法:

filter(function, iterable)

说明:

filter() 函数接收 2 个参数。

  • function(必选):是一个可调用对象(比如函数、lambda 表达式),用于判断元素是否保留。当值为 None 时,自动过滤假值。
  • iterable(必选):是一个可迭代对象(比如列表、元组、集合等)。

filter(function, iterable) 便是把 iterable 中每一个元素依次传入 function 进行 “判断”。如果 function 返回 True,则保留该元素;如果 function 返回 False,则丢弃该元素。

filter() 函数最终会返回一个新的可迭代对象,然后你可以使用 list() 函数将这个可迭代对象转化为一个列表。

提示: filter() 是一个高阶函数。Python 内置的高阶函数只有 2 个:filter()、map()。而 reduce() 属于 functools 模块。

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。
  • 空字符串。
  • 空容器。

上一篇: map()

下一篇: reduce()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号