Python filter()函数的用法及举例
Python filter() 函数是内置函数,通过为序列(可迭代对象)中的每个元素调用一个布尔函数来过滤序列。这个布尔函数接受序列中的每个元素作为参数,并基于预定义的条件来判断元素是否应该被保留或丢弃。最后,它返回一个由被保留元素组成的序列。
filter() 函数可以使用以下语法调用:
filter(function, iterable)
其中,function 是一个返回布尔值的函数,iterable 是一个 Python 序列。它可以是列表、元组、集合、字符串或某些其他序列类型。
因此,filter() 函数根据给定的 function 的条件过滤 iterable 中的元素,并返回一个新的序列(类型与 iterable 同样)。
举例说明:
# 求列表中的偶数 my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] even_numbers = list(filter(lambda x: x % 2 == 0, my_list)) print(even_numbers) # [2, 4, 6, 8]
在上面的代码示例中,首先创建了一个包含数字的列表 my_list,然后使用 lambda 函数来定义一个测试条件(即:是否为偶数)。这个 lambda 函数接受列表中的每个元素作为参数,并返回布尔值(即 True 或 False)。
接下来,将 filter() 函数应用于这个列表和测试条件。它遍历列表中的每个元素,并使用 lambda 函数对每个元素进行测试。仅当测试为 True 时,该元素才被认为是“通过”的(即保留)。最后,它返回所有通过测试的元素的列表。
为了使 filter() 函数返回值可读性更好,需要将它转换为列表,以便能够将它存储在变量 even_numbers 中并打印它。
下面再看一个例子,使用 filter() 函数将一个字符串列表中的所有元素转换为大写:
# 将字符串转换为大写 my_list = ["Hello", "World", "Python", "Filter"] upper_list = list(filter(lambda x: x.isupper(), my_list)) print(upper_list) # ["Hello", "World", "Filter"]
在上面的代码示例中,首先创建了一个包含字符串的列表 my_list,然后使用 lambda 函数定义一个测试条件(即:字符串是否为大写)。这个 lambda 函数接受列表中的每个元素作为参数,并返回布尔值(即 True 或 False)。
接下来,将 filter() 函数应用于这个列表和测试条件。它遍历列表中的每个元素,并使用 lambda 函数对每个元素进行测试。仅当测试为 True 时,该元素才被认为是“通过”的(即保留)。最后,它返回所有通过测试的元素的列表。
为了使 filter() 函数返回值可读性更好,需要将它转换为列表,以便能够将它存储在变量 upper_list 中并打印它。
总结:
- filter() 函数是 Python 内置函数,用于过滤序列中的元素。
- filter() 函数接受一个布尔函数和一个可迭代的 Python 序列作为参数,并返回一个由满足布尔函数条件的元素组成的新序列。
- filter() 函数可以与 lambda 表达式一起使用来定义测试条件,也可以使用已经定义的函数。
- filter() 函数返回的值需要转换为列表等序列类型,以便更好地使用和打印。
