filter()函数:筛选序列中的元素
filter()函数是Python中内置的一个高阶函数,其作用是从序列中筛选出符合条件的元素,并将这些元素组成一个新的序列。它的语法格式如下:
filter(function, iterable)
其中,function是一个函数,用于判断序列中的每个元素是否符合条件;iterable是一个序列,可以是列表、元组、集合等可迭代对象。
filter()函数的工作流程是,对于序列中的每个元素,都将其传入function中进行判断,如果返回值为True,则该元素被保留在新的序列中,否则被过滤掉。最终过滤后的元素会被组成一个新的序列返回。
下面通过一个实例来说明filter()函数的使用方法:
# 过滤出列表中所有的奇数
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odd_lst = list(filter(lambda x: x % 2 == 1, lst))
print(odd_lst) # [1, 3, 5, 7, 9]
在上面的代码中,我们定义了一个列表lst,然后使用filter()函数过滤出了其中所有的奇数,并将结果存储在odd_lst中。其中,lambda x: x % 2 == 1是一个匿名函数,用于判断序列中每个元素是否是奇数。通过list()函数将filter()返回的迭代器转换为列表,最终结果为[1, 3, 5, 7, 9]。
filter()函数应用广泛,下面分别介绍一些常见的应用场景。
1.过滤出满足条件的元素
filter()函数最常见的用途就是筛选符合条件的元素。例如,将一个整数列表中大于等于5且小于等于10的元素过滤出来:
lst = [2, 4, 6, 8, 10, 12, 14]
new_lst = list(filter(lambda x: x>=5 and x<=10, lst))
print(new_lst) # [6, 8, 10]
2.过滤出不为空的元素
在实际应用中,经常需要对一个列表或元组中的所有元素进行过滤,去除其中的空值,过滤出不为空的元素。例如:
lst = ['', 'hello', '', 'world', '', ' ']
new_lst = list(filter(lambda x: x.strip(), lst))
print(new_lst) # ['hello', 'world']
在上面的代码中,我们用lambda函数对每个元素进行了strip()操作,去除了前后空格。如果元素变为空字符串,则filter()会将其过滤掉。
3.过滤出正数
在统计分析数据时,需要经常对某个序列中的数据进行过滤或筛选。例如,从一组数字中过滤出所有正数:
lst = [-3, 2, -1, 0, 5, 6, -4]
new_lst = list(filter(lambda x:x>0, lst))
print(new_lst) # [2, 5, 6]
4.过滤出文件列表
在处理文件列表时,经常需要对其进行过滤,只保留符合条件的文件。例如,只保留扩展名为.py的文件:
import os
file_list = os.listdir('.')
new_list = list(filter(lambda x: x.endswith('.py'), file_list))
print(new_list)
在上面的代码中,我们使用os.listdir('.')获取当前目录下的所有文件列表,然后使用filter()函数将其中扩展名为.py的文件筛选出来。
总之,filter()函数是Python中十分有用的一个工具,它能够对列表、元组、集合等序列进行筛选和过滤,非常适合在数据处理、条件判断等方面使用。
