欢迎访问宙启技术站
智能推送

了解Python的filter()函数:如何使用和示例

发布时间:2023-06-14 01:09:22

Python中的filter()函数是一种高阶函数,它允许我们从一个可迭代对象中过滤出满足条件的元素并返回一个新的可迭代对象。它的语法如下:

filter(function, iterable)

其中,function是用来过滤元素的函数,它接受一个参数并返回True或False,表示该参数是否应该保留在结果中;iterable是要过滤的可迭代对象。

下面我们来看一些示例。

示例1:过滤出偶数

假设我们有一个列表,我们想要过滤出其中的偶数。可以这样使用filter()函数:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_nums = list(filter(lambda x: x % 2 == 0, nums))

print(even_nums)

输出:

[2, 4, 6, 8, 10]

这段代码首先定义了一个列表nums,包含了1到10的数。接着我们使用了filter()函数,传入一个lambda表达式作为function参数。这个lambda表达式接受一个参数x,表示nums中的每个元素。如果x % 2 == 0为True,表示x是一个偶数,这个元素应该被保留下来,我们返回True;否则我们返回False。最后把结果转换成列表并保存到even_nums中,最后打印出来。

示例2:过滤出长度大于3的字符串

假设我们有一个字符串列表,我们想要过滤出其中长度大于3的字符串。可以这样使用filter()函数:

words = ['apple', 'banana', 'orange', 'pear', 'grape']

long_words = list(filter(lambda x: len(x) > 3, words))

print(long_words)

输出:

['apple', 'banana', 'orange', 'grape']

这段代码与示例1大致相同。我们的function参数使用了另外一种函数定义方式——lambda表达式,这个lambda表达式接受一个参数x,表示words中的每个元素。如果len(x) > 3为True,表示这个字符串长度大于3,需要保留,返回True;否则返回False。最后把结果转换成列表并保存到long_words中,最后打印出来。

示例3:使用filter()去重

filter()函数可以用来去重。假设我们有一个元组列表,每个元组都表示一个学生信息,包括姓名、年龄和性别。我们想要按姓名去重。可以这样使用filter()函数:

students = [('Alice', 18, 'F'), ('Bob', 17, 'M'), ('Alice', 20, 'F'), 

           ('Carl', 18, 'M'), ('Bob', 19, 'M'), ('Alice', 18, 'F')]

unique_students = list(filter(lambda x: students.count(x) == 1, students))

print(unique_students)

输出:

[('Carl', 18, 'M')]

这段代码比较复杂,所以我们分步来看。首先定义了一个元组列表students,包含了6个元组。我们使用filter()函数,并传入一个lambda表达式作为function参数。这个lambda表达式接受一个参数x,表示students中的每个元素。我们使用count()方法统计students中x出现的次数。如果x只出现了1次,表示它是 的,需要保留,返回True;否则返回False。最后把结果转换成列表并保存到unique_students中,最后打印出来。

总结

filter()函数是一个非常有用的函数,在数据处理中经常被使用。它可以帮助我们从一个可迭代对象中过滤出符合条件的元素,并返回一个新的可迭代对象。只需要传入一个函数用来过滤元素,该函数接受一个参数并返回True或False。基于函数式编程的思想,filter()函数可以让我们写出更加简单、优雅的程序。