1、Python内建的filter()函数用于过滤序列,根据以下描述可以得知filter()函数需传入两个参数:分别为 函数(返回值类型为bool型,python中非0的数字也为True)和可迭代数据 ;返回的是一个filter对象(满足函数中判断条件为True的元素)
filter(function or None, iterable) --> filter object
案列一(列表):
存在列表data = [-1, 2, 3, -4, 5],要求过滤掉列表中的负数,得到一个列表为:[2, 3, 5];在该案例中使用三种方式实现:普通for循环、列表生成式、内置函数filter()
''' 1、使用普通for循环实现 ''' def demo1(): data=[-1, 2, 3, -4, 5] res = [] for i in data: if i>=0: res.append(i) print(res) # 结果为[2, 3, 5] ''' 2、使用列表推导式实现 ''' def demo2(): data = [-1, 2, 3, -4, 5] res = [x for x in data if x >= 0] print(res) # 结果为 [2, 3, 5] ''' 3、使用filter 内置函数实现 ''' def demo3(): data = [-1, 2, 3, -4, 5] res = list(filter(lambda x: x>=0 , data)) #这里使用到了匿名函数 lambda print(res) # 结果为 [2, 3, 5]
案例二(字典):
存在一个学生成绩字典,根据学生成绩过滤出成绩大于90分的学生字典信息;使用三种方式实现:普通for循环、列表生成式、内置函数filter()
import random ''' 1、使用普通for循环实现 ''' def demo1(score_dict): res = {} for key, value in score_dict.items(): if value >= 90: res[key] = value print(res) ''' 2、使用字典推导式实现 ''' def demo2(score_dict): res = {key: value for key, value in score_dict.items() if value >= 90} print(res) ''' 3、使用内置函数filter()实现 ''' def demo3(score_dict): res = dict(filter(lambda x: x[1]>=90, score_dict.items())) print(res) score_dict = {f'student{i+1}' : random.randint(60,100) for i in range(10)} print(score_dict) demo1(score_dict) demo2(score_dict) demo3(score_dict)
案例三(集合):
存在集合data = {-1, -2, 3, -4, 5},要求过滤掉列表中的正数,得到一个列表为:{-1, -2, -4};在该案例中使用三种方式实现:普通for循环、集合生成式、内置函数filter()
''' 1、使用普通for循环实现 ''' def demo1(data): res = set() for x in data: if x < 0: res.add(x) print(res) ''' 2、使用集合推导式实现 ''' def demo2(data): res = {x for x in data if x < 0} print(res) ''' 3、使用内置函数filter实现 ''' def demo3(data): res = set(filter(lambda x: x<0, data)) print(res) data = {-1, -2, 3, -4, 5} demo1(data) demo2(data) demo3(data)