filter()函数是Python 3内置的一种常用函数,主要的功能是按照给定的条件过滤列表,并返回符合条件的元素。
filter()函数的语法规则如下:
可迭代对象中的每个元素将作为参数传递给判断函数进行判断,判断函数将会返回True或False,最后返回所有判断为True的元素。
filter(function,iterable)
function -> 判断条件
iterable -> 可迭代对象
和map函数相同,在Python中filter函数返回的是一个迭代器,这意味着我们无法通过index访问filter对象,也不能通过len获得filter对象的长度。
# Demo
Demo_lists=[1,2,3,4,5,6,7]
Demo_result_lists=filter(lambda x:x>2,Demo_lists)
print(f'filter type : {type(Demo_result_lists)}')
# Result
filter type : <class 'filter'>
我们可以直接for循环来依次输出filter对象中的每个元素,但是这个迭代器只能执一次,如果想多次重复使用filter函数的结果,可以使用list将这个迭代器转换为列表。
# Demo
Demo_lists=[1,2,3,4,5,6,7]
Demo_result_lists=filter(lambda x:x>2,Demo_lists)
print(f'filter type : {type(Demo_result_lists)}')
print('First iterator output : ')
for iter in Demo_result_lists:
print(iter)
print('Second iterator output : ')
for iter in Demo_result_lists:
print(iter)
Demo_result_lists=filter(lambda x:x>2,Demo_lists)
Demo_result_lists=list(Demo_result_lists)
print('First list output : ')
print(Demo_result_lists)
print('Second list output : ')
print(Demo_result_lists)
# Result
First iterator output :
3
4
5
6
7
Second iterator output :
First list output :
[3, 4, 5, 6, 7]
Second list output :
[3, 4, 5, 6, 7]
下面给出filter函数的几种用法实例:
1.利用filter函数筛选出列表中为奇数的元素
# 1.利用filter函数筛选出列表中为奇数的元素
Demo_lists=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
def Is_odd(n):
return n%2==1
Result_lists=filter(Is_odd,Demo_lists)
Result_lists=list(Result_lists)
print(Result_lists)
# Result
[1, 3, 5, 7, 9, 11, 13, 15, 17]
在Python中,filter函数经常和匿名函数lambda函数一起使用,例如:
2.利用filter函数过滤掉列表中的数字0
# 2.利用filter函数过滤掉列表中的数字0
Demo_lists=[1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9]
Result_lists=filter(lambda x:x!=0,Demo_lists)
# 同样也可以写成以下形式:
# Result_lists=filter(lambda x:x!=0,Demo_lists)
# 因为在Python中:
# 1==True
# 0==False
Result_lists=list(Result_lists)
print(Result_lists)
# Result
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3.利用filter函数过滤列表中字母的大小写
# 3.利用filter函数过滤列表中字母的大小写
Alphabet_demo_lists=['a','b','C','D','e','F','H','i']
Upper_result_lists=filter(lambda x:x.isupper(),Alphabet_demo_lists)
Lower_result_lists=filter(lambda x:x.islower(),Alphabet_demo_lists)
Upper_result_lists=list(Upper_result_lists)
Lower_result_lists=list(Lower_result_lists)
print(f'Upper : {Upper_result_lists}')
print(f'Lower : {Lower_result_lists}')
# Result
Upper : ['C', 'D', 'F', 'H']
Lower : ['a', 'b', 'e', 'i']
4.利用filter函数处理字典构成的列表
# 4.利用filter函数处理字典构成的列表
Dict_demo_lists=[
{'name':'Tom','score':64},
{'name':'Amy','score':75},
{'name':'Jack','score':88},
{'name':'Louis','score':55}
]
Result_lists=filter(lambda x:x['score']>70,Dict_demo_lists)
Result_lists=list(Result_lists)
print(Result_lists)
# Result
[{'name': 'Amy', 'score': 75}, {'name': 'Jack', 'score': 88}]
Reference: