filter函数:Python中过滤列表的高级方法
在Python的列表操作中,经常需要对列表进行过滤,筛选出满足某些条件的元素。为了方便这种操作,Python中提供了一个内置函数filter()。filter()函数可以用来过滤一个可迭代对象(比如列表、元组等),返回符合要求的新元素组成的对象。
filter()函数的语法如下:
filter(function, iter)
其中function是一个能够接受一个参数并返回True或False的函数,iter是一个可迭代对象。filter()函数根据function的返回值对iter中的每个元素进行判断,如果function返回True,则将该元素添加到返回的对象中去。最终将返回的对象是一个新的对象,其中包含了满足条件的元素。
下面我们看一个例子,假设我们有一个列表,列表中的元素是一些数字,我们要找出其中所有的偶数:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] b = list(filter(lambda x: x % 2 == 0, a)) print(b)
上面代码中,我们使用了lambda表达式定义了一个匿名函数,这个匿名函数判断x是否是偶数,如果是,则返回True,否则返回False。filter()函数会对列表a中的每个元素都调用这个函数,最终将满足条件的元素组成一个新的列表返回。
运行这段代码,输出结果如下:
[2, 4, 6, 8, 10]
我们可以看到,b中只有偶数,其他元素都被过滤掉了。
下面再有一个例子,我们要找出一个列表中所有的大写字母:
a = ['a', 'B', 'c', 'D', 'e', 'F'] b = list(filter(lambda x: x.isupper(), a)) print(b)
上面代码中,我们定义了一个匿名函数,判断元素x是否是大写字母。filter()函数会对列表a中的每个元素都调用这个函数,最终将满足条件的元素组成一个新的列表返回。
运行这段代码,输出结果如下:
['B', 'D', 'F']
我们可以看到,b中只有大写字母,其他元素都被过滤掉了。
filter()函数的优点在于可以方便地进行复杂条件的筛选,比如筛选出列表中所有的质数:
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = list(filter(is_prime, a))
print(b)
上面代码中,我们定义了一个is_prime()函数,判断一个数是否是质数。我们将这个函数作为参数传给filter()函数,filter()函数会对列表a中的每个元素都调用这个函数,最终将满足条件的元素组成一个新的列表返回。
运行这段代码,输出结果如下:
[2, 3, 5, 7]
我们可以看到,b中只有质数,其他元素都被过滤掉了。
最后,需要注意的是,filter()返回的对象是一个迭代器,所以如果要输出一个列表,需要使用list()函数将其转换为列表。如果不想转换为列表,也可以使用for循环来遍历结果。
