Python内置函数之filter():对一个可迭代对象的每个元素进行判断筛选,并返回一个新的可迭代对象
Python是一门非常实用的编程语言,它提供了很多非常方便的内置函数来处理各种不同的数据结构。其中,filter()函数就是一个非常实用的函数。filter()函数可以对一个可迭代对象中的每个元素进行筛选判断,并根据判断结果返回一个新的可迭代对象。在本文中,我们将详细介绍filter()函数的使用方法。
1、语法
filter()函数的语法如下所示:
filter(function, iterable)
其中,function是用来判断每个元素是否满足条件的函数,iterable是要进行筛选的可迭代对象,比如列表、元组、集合等等。
filter()函数会遍历iterable对象中的每个元素,并将其作为参数传入function函数中进行判断。判断结果为True的元素将被保留下来,并添加到一个新的可迭代对象中,最后将这个新的可迭代对象作为函数的返回值返回。
例如,下面的代码展示了如何使用filter()函数筛选出所有小于5的元素:
>>> nums = [2, 5, 1, 6, 3, 7, 8, 9, 4] >>> def less_than_5(n): ... return n < 5 ... >>> result = filter(less_than_5, nums) >>> print(list(result)) [2, 1, 3, 4]
在这个例子中,我们首先定义了一个函数less_than_5,这个函数用来判断一个数是否小于5。然后,我们使用filter()函数对nums列表进行筛选,只保留满足less_than_5函数条件的元素。通过打印返回结果,我们可以看到,filter()函数返回的新列表中只包含小于5的元素。
2、应用场景
filter()函数通常用来对一个可迭代对象进行筛选,只保留符合条件的元素。它在很多场景下都非常适用,比如:
(1)筛选出满足条件的元素
如果你有一个列表,需要从中筛选出符合一定条件的元素,那么就可以使用filter()函数。例如,如果你有一个存放股票信息的列表,需要从中筛选出涨幅超过5%的股票,就可以使用filter()函数来完成。
>>> stocks = [{'name':'AAPL', 'change':3.2}, {'name':'GOOG', 'change':5.8}, {'name':'BABA', 'change':2.1}]
>>> result = filter(lambda x: x['change'] > 5, stocks)
>>> print(list(result))
[{'name': 'GOOG', 'change': 5.8}]
这个例子中,我们使用了lambda表达式来定义判断条件,即只保留涨幅超过5%的股票。最后的返回结果中,只有GOOG符合判断条件。
(2)去除列表中的空元素
如果你有一个列表,其中包含了许多空元素,需要将它们去除掉,可以使用filter()函数。例如,下面的代码演示了如何使用filter()函数去除列表中的空元素:
>>> elements = ['hello', '', 'world', '', '', 'python', 'is', '', 'great'] >>> result = filter(lambda x: x != '', elements) >>> print(list(result)) ['hello', 'world', 'python', 'is', 'great']
在这个例子中,我们使用lambda表达式定义了一个判定条件,即列表中的元素不为空。然后,使用filter()函数对列表进行筛选,只保留符合条件的元素。最后,使用list()函数将筛选结果转为列表并打印。
(3)过滤出满足条件的文件
如果你需要在一个文件夹中寻找符合一定条件的文件,并将这些文件全都处理一遍,可以使用filter()函数。例如,对于一个包含多个csv文件的文件夹,可以使用filter()函数找到所有包含特定数据的csv文件,并进行处理。
>>> import os
>>> def is_csv_file(filename):
... return filename.endswith('.csv')
...
>>> csv_files = filter(is_csv_file, os.listdir('/path/to/folder'))
这个例子中,我们首先定义了一个is_csv_file()函数,用来判断一个文件是否是csv文件。然后,使用os.listdir()函数列出文件夹中的所有文件名,并使用filter()函数过滤出所有的csv文件。通过这个方法,我们可以轻松地处理包含大量csv文件的文件夹。
3、注意事项
在使用filter()函数时,需要注意以下几点:
(1)function函数应该返回一个Boolean类型的值,即True或False。如果返回的不是Boolean类型,则filter()函数会抛出TypeError异常。
(2)iterable对象可以是任何可迭代对象,包括列表、元组、集合、字典等。
(3)filter()函数返回的结果是一个迭代器对象,需要使用list()函数将其转化为列表。
(4)如果对于一个迭代器已经遍历一遍,那么在再次遍历之前,需要重新定义一个新的filter()函数并重新生成迭代器。
4、总结
filter()函数是Python中非常实用的一个内置函数,它可以对一个可迭代对象进行筛选,只保留满足条件的元素,并返回一个新的可迭代对象。filter()函数的语法非常简单,只需传入一个判断条件函数和一个可迭代对象即可。在使用filter()函数的时候,需要注意function函数应该返回一个Boolean类型的值,iterable对象可以是任何可迭代对象,返回的结果是一个迭代器对象,需要使用list()函数将其转化为列表。使用filter()函数可以极大地简化代码,提高程序的效率。
