欢迎访问宙启技术站
智能推送

filter()函数:筛选序列中的元素

发布时间:2023-06-13 22:02:16

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中十分有用的一个工具,它能够对列表、元组、集合等序列进行筛选和过滤,非常适合在数据处理、条件判断等方面使用。