Python的filter()函数是一个内置的高阶函数,允许你根据特定条件过滤可迭代对象(如列表、元组或集合)的元素。该函数接受两个参数:一个测试条件的函数和包含要过滤元素的可迭代对象。过滤函数应接受一个输入并返回一个布尔值(True或False),表示输入是否满足条件。
当你应用filter()函数时,它会遍历输入的可迭代对象并对每个元素调用过滤函数。如果过滤函数对某个元素返回True,则该元素包含在结果中。如果返回False,则该元素从结果中排除。filter()函数返回一个包含过滤元素的迭代器,可以根据需要将其转换为列表、元组或其他可迭代类型。
在Python中,你可以将任何函数作为过滤函数传递,包括lambda函数。lambda函数是使用lambda关键字定义的匿名函数,它们可以直接在filter()调用中使用,用于创建小型一次性使用的函数。
当处理大型数据集或需要应用复杂过滤逻辑时,filter()函数特别有用。通过结合使用filter()函数和lambda函数或其他自定义函数,你可以为过滤操作创建更易读、简洁的代码。
示例:
以下是显示filter()的各种用法和操作的示例列表。
注意1:本页面中的所有示例都是用Python 3.x编写的。如果你使用Python 2.x,可能无法正常工作。
注意2:除非特别提及,否则本页面中的所有示例都假定是在Windows 7上编写/运行的。如果你在其他操作系统上运行,可能需要稍微修改一下语法。
应用带有一个参数的正常函数的过滤器 - 示例1
应用带有一个参数的lambda函数的过滤器 - 示例2
打印Filtered对象中的所有项目 - 示例3
打印Filtered对象中的所有项目 - 示例4
在Filtered对象中索引项目 - 示例5
< Example 1 >
def getEven(x):
if (x % 2) == 0 :
return True
else :
return False
numList = [0,1,2,3,4,5,6,7,8,9,10]
evenList = filter(getEven,numList)
print(evenList)
print(list(evenList))
Result :----------------------------------
<filter object at 0x02FF18D0>
[0, 2, 4, 6, 8, 10]
< Example 2 >
numList = [0,1,2,3,4,5,6,7,8,9,10]
evenList = filter(lambda x :(x % 2) == 0,numList)
print(evenList)
print(list(evenList))
Result :----------------------------------
<filter object at 0x03121930>
[0, 2, 4, 6, 8, 10]
< Example 3 >
numList = [0,1,2,3,4,5,6,7,8,9,10]
evenList = filter(lambda x :(x % 2) == 0,numList)
for index, item in enumerate(evenList):
print(index,',',item)
Result :----------------------------------
0 , 0
1 , 2
2 , 4
3 , 6
4 , 8
5 , 10
< Example 4 >
numList = [0,1,2,3,4,5,6,7,8,9,10]
evenList = filter(lambda x :(x % 2) == 0,numList)
for item in enumerate(evenList):
print(item)
Result :----------------------------------
(0, 0)
(1, 2)
(2, 4)
(3, 6)
(4, 8)
(5, 10)
< Example 5 >
numList = [0,1,2,3,4,5,6,7,8,9,10]
evenList = filter(lambda x :(x % 2) == 0,numList)
evenList = list(evenList);
print(evenList)
print(evenList[0])
print(evenList[1:3])
Result :----------------------------------
[0, 2, 4, 6, 8, 10]
0
[2, 4]
< Example xx >