Python中的filter()函数用法及示例 - 用于过滤可迭代对象中的元素
Python中的filter()函数是一种用于过滤可迭代对象中的元素的高阶函数。它接收两个参数,第一个参数是一个函数,第二个参数是一个可迭代的对象。filter()函数会遍历迭代器中的每一个元素,将其传入第一个参数的函数进行处理,并根据函数返回值的真假情况决定是否保留该元素。具体来说,如果函数返回True,则保留该元素,否则将其过滤掉。
filter()函数的用法十分灵活,我们可以使用lambda表达式、内置函数或者自定义函数作为第一个参数传递给它。此外,filter()函数的返回值是一个filter对象,我们可以将它转换成列表等Python数据类型来进行进一步的操作。
下面让我们来看一些具体的示例,以更好地理解filter()函数的用法。
1. 使用lambda表达式过滤列表中的元素
我们可以使用lambda表达式来创建一个短小精悍的函数来作为filter()函数的第一个参数。例如,我们可以使用以下代码来过滤掉列表中的偶数元素:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered_lst = filter(lambda x: x % 2 == 1, lst) print(list(filtered_lst))
在这个例子中,我们定义了一个lambda表达式,它的功能是判断一个数是否为奇数。然后我们使用filter()函数将这个lambda表达式作为第一个参数传递给它,将列表lst作为第二个参数传递给它。最终,我们使用list()函数将filter对象转换成列表,并将结果打印出来。
运行以上代码,输出如下:
[1, 3, 5, 7, 9]
可以看到,结果列表中只包含了原列表中的奇数元素,偶数元素被过滤掉了。
2. 使用内置函数过滤字符串中的元素
除了使用lambda表达式外,我们还可以使用Python内置的函数来作为filter()函数的第一个参数。例如,我们可以使用以下代码来过滤掉字符串中的非数字字符:
str = "a1b2c3d4e5"
filtered_str = filter(str.isdigit, str)
print(''.join(filtered_str))
在这个例子中,我们使用了str.isdigit函数作为filter()函数的第一个参数。这个函数的功能是判断一个字符串是否为数字字符串。然后我们将字符串str作为第二个参数传递给它,并使用join()函数将filter对象转换成字符串。最终结果中只包含了数字字符,其他字符被过滤掉了。
运行以上代码,输出如下:
12345
3. 使用自定义函数过滤列表中的元素
除了使用lambda表达式和内置函数外,我们还可以使用自定义函数作为filter()函数的第一个参数。例如,我们可以使用以下代码来过滤掉列表中的负数元素:
def is_positive(x):
return x >= 0
lst = [-2, -1, 0, 1, 2]
filtered_lst = filter(is_positive, lst)
print(list(filtered_lst))
在这个例子中,我们首先定义了一个自定义函数is_positive,它的功能是判断一个数是否为正数或0。然后我们将这个函数作为filter()函数的第一个参数传递给它,将列表lst作为第二个参数传递给它。最终,我们将filter对象转换为列表,并将结果打印出来。
运行以上代码,输出如下:
[0, 1, 2]
可以看到,结果列表中只包含了原列表中的非负数元素。
总结
filter()函数是Python中非常实用的一个高阶函数,它可以帮助我们快速地对可迭代对象中的元素进行过滤。我们可以使用lambda表达式、内置函数或者自定义函数来作为filter()函数的第一个参数,从而实现不同的过滤功能。使用filter()函数可以使我们的代码更加简洁和高效,同时可以提高我们对Python内置函数和高阶函数的理解程度。
