Python的内置函数filter()
Python 的内置函数 filter()
用于从一个可迭代对象(如列表、元组、字符串等)中过滤出所有满足某个条件的元素,并返回一个迭代器。
1. filter()
的语法
filter(function, iterable)
function
:用于判断条件的函数,返回值为True
或False
。如果function
是None
,则直接返回iterable
中为True
的元素。iterable
:一个可迭代对象(如列表、元组等)。
2. 工作原理
filter()
函数会将 iterable
中的每一个元素传递给 function
进行处理,如果 function
返回 True
,则该元素会被保留;否则,元素会被过滤掉。最终返回一个包含所有符合条件的元素的迭代器。
3. 示例
示例1:过滤出列表中所有的偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 定义一个判断是否为偶数的函数
def is_even(n):
return n % 2 == 0
# 使用 filter 过滤出偶数
even_numbers = filter(is_even, numbers)
print(list(even_numbers)) # 输出 [2, 4, 6, 8, 10]
示例2:使用 lambda
表达式过滤出长度大于3的字符串
words = ['apple', 'banana', 'kiwi', 'pear']
# 使用 lambda 表达式来过滤
long_words = filter(lambda word: len(word) > 3, words)
print(list(long_words)) # 输出 ['apple', 'banana', 'kiwi']
示例3:过滤出列表中的非空字符串
strings = ['hello', '', 'world', '', 'python']
# 使用 filter 过滤非空字符串
non_empty_strings = filter(None, strings)
print(list(non_empty_strings)) # 输出 ['hello', 'world', 'python']
4. 使用 filter()
和 list
进行类型转换
如果需要将 filter()
返回的迭代器转换为列表、元组等类型,可以使用内置的 list()
或 tuple()
函数。
示例4:将 filter()
的结果转换为列表
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出 [2, 4, 6]
5. 与列表推导式的对比
filter()
函数和列表推导式都可以用来过滤数据。列表推导式的写法更为简洁,但 filter()
更加清晰地表达了过滤的意图。
示例5:列表推导式与 filter()
numbers = [1, 2, 3, 4, 5, 6]
# 使用 filter()
even_numbers_filter = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers_filter) # 输出 [2, 4, 6]
# 使用列表推导式
even_numbers_list = [x for x in numbers if x % 2 == 0]
print(even_numbers_list) # 输出 [2, 4, 6]
6. 小结
filter()
函数在需要根据条件筛选数据时非常有用。它通过提供一个过滤条件函数,让代码更具可读性和表达力。尽管在某些情况下,列表推导式可以替代 filter()
,但 filter()
函数依然是处理大数据集时的理想选择,特别是在函数式编程风格中。
License:
CC BY 4.0