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: