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)