如同字面意思,可以原地保留某个对象中满足指定要求的元素。
例如,我们想要去除列表中的指定数,给定一个数组A如下:
A = [3, 7, 8, 6, 9, 8, 2, 1, 8]
现在我们想要去除里面的所有数字8。一个最简单的方法当然是写for循环:
A = [3, 7, 8, 6, 9, 8, 2, 1, 8]
for a in A:
if a == 8:
A.remove(8)
print(A)
但是这样的话就不太简洁。利用filter函数的写法如下:
A = [3, 7, 8, 6, 9, 8, 2, 1, 8]
def not_8(x):
return x != 8
A = filter(not_8, A)
print(list(A))
这里将判定条件单独封装出来是为了方便理解,实际上:
filter(not_8, A)
与匿名函数写法
filter(lambda x: x != 8, A)
是等同的,后者在实际代码中更为常见。
总结,形式化的语法规范如下:
filter(function, iterable)
- iterable:可被迭代(被for循环)的对象,最常用的就是列表了
- function:判定函数,当iterable中元素传入时,返回为True的被保留,反之不被保留