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}]