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
,filter()
会自动过滤掉所有“假值”(Falsy)的元素。
values = [0, 1, False, True, '', 'hello', None, [], [1, 2]]
truthy_values = filter(None, values)
print(list(truthy_values)) # 输出: [1, True, 'hello', [1, 2]]
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] |
words = ['', 'apple', 'banana', ' ', 'orange', None]
non_empty = filter(None, words)
print(list(non_empty)) # 输出: ['apple', 'banana', ' ', 'orange']
注意 ' '
是空格不是空字符串,所以会被保留。
nums = [10, 15, 20, 25, 30]
over_20 = filter(lambda x: x > 20, nums)
print(list(over_20)) # 输出: [25, 30]
filter()
就是一个筛选工具,它可以按照你定义的规则,从一组数据中挑出满足条件的元素。