Python中filter()函数详解

什么是 filter()

filter() 是 Python 内置的一个函数,它的作用是:

从一个可迭代对象(如列表、元组等)中筛选出符合条件的元素,生成一个新的迭代器。

你可以把它理解成一个“过滤器”:
你给它一堆数据和一个筛选条件,它会帮你把符合这个条件的数据挑出来。


基本语法

filter(函数, 可迭代对象)
  • 第一个参数是一个函数,它用来判断每个元素是否符合条件。
  • 第二个参数是一个可迭代对象,比如列表、元组、字符串等。
  • 返回值是一个迭代器,可以用 list() 或 for 循环来查看结果。

✅ 简单例子:筛选偶数

numbers = [1, 2, 3, 4, 5, 6]

# 定义一个函数,判断一个数是不是偶数
def is_even(n):
    return n % 2 == 0

# 使用 filter 过滤
even_numbers = filter(is_even, numbers)

# 转换成列表查看结果
print(list(even_numbers))  # 输出: [2, 4, 6]

解释:

  • is_even 是判断函数;
  • filter() 把 numbers 中每一个传给 is_even
  • 只有返回 True 的才会被保留下来。

更简洁写法:使用 lambda

你可以用 lambda 表达式代替普通函数,让代码更简洁:

numbers = [1, 2, 3, 4, 5, 6]

even_numbers = filter(lambda x: x % 2 == 0, numbers)

print(list(even_numbers))  # 输出: [2, 4, 6]

如果函数是 None,会怎样?

如果你传的是 Nonefilter() 会自动过滤掉所有“假值”(Falsy)的元素。

values = [0, 1, False, True, '', 'hello', None, [], [1, 2]]

truthy_values = filter(None, values)

print(list(truthy_values))  # 输出: [1, True, 'hello', [1, 2]]

常见 Falsy 值包括:

  • False
  • 0
  • ''(空字符串)
  • [](空列表)
  • {}(空字典)
  • None

和 map() 对比一下

函数 作用 示例
map() 对每个元素做变换 map(lambda x: x*2, [1,2,3]) → [2,4,6]
filter() 筛选出符合条件的元素 filter(lambda x: x%2==0, [1,2,3]) → [2]

✅ 实际应用场景举例

场景1:筛选非空字符串

words = ['', 'apple', 'banana', ' ', 'orange', None]

non_empty = filter(None, words)

print(list(non_empty))  # 输出: ['apple', 'banana', ' ', 'orange']

注意 ' ' 是空格不是空字符串,所以会被保留。


场景2:筛选大于某个值的数字

nums = [10, 15, 20, 25, 30]

over_20 = filter(lambda x: x > 20, nums)

print(list(over_20))  # 输出: [25, 30]

总结一句话:

filter() 就是一个筛选工具,它可以按照你定义的规则,从一组数据中挑出满足条件的元素。

你可能感兴趣的:(Python,知识分享,python,开发语言)