Python中的filter()函数简介 - 过滤元素
Python中的filter()函数是一个内置函数,用于对可迭代对象(如列表、元组、字典、集合等)中的元素进行过滤,只保留符合条件的元素,并以新的可迭代对象的方式返回。
filter()函数的语法如下:
filter(function, iterable)
其中,function是一个函数,用于判断可迭代对象中的元素是否符合要求,可返回True或False;iterable是一个可迭代对象,即需要进行过滤的序列。
filter()函数将可迭代对象中的每个元素都传递给函数,如果函数返回True,就将该元素保留下来,否则就将其丢弃。最终返回的是一个新的可迭代对象,包含了所有被保留下来的元素。
下面是一个简单的例子,用filter()函数筛选出列表中的偶数元素:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] new_list = list(filter(lambda x: x % 2 == 0, my_list)) print(new_list) # 输出 [2, 4, 6, 8]
这个例子中,我们传递了一个lambda表达式作为函数参数,用于判断列表中的元素是否为偶数。filter()函数将my_list中的每个元素都传递给lambda表达式,如果该元素是偶数,则将其保留下来,否则就丢弃。最终得到的new_list就是由偶数元素组成的列表。
除了lambda表达式,我们也可以将自定义函数作为filter()函数的参数。例如,下面是一个通过自定义函数实现过滤奇数元素的例子:
def is_odd(x):
return x % 2 != 0
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_list = list(filter(is_odd, my_list))
print(new_list) # 输出 [1, 3, 5, 7, 9]
在这个例子中,我们定义了一个is_odd()函数,用于判断一个数是否为奇数。filter()函数将my_list中的每个元素都传递给is_odd()函数,如果该元素是奇数,则将其保留下来,否则就丢弃。最终得到的new_list就是由奇数元素组成的列表。
除了常规的列表、元组、字典、集合等可迭代对象外,filter()函数也可以处理生成器(generator)。下面是一个通过生成器实现过滤小于5的元素的例子:
def get_numbers():
for i in range(10):
yield i
new_generator = filter(lambda x: x < 5, get_numbers())
for i in new_generator:
print(i) # 输出 0, 1, 2, 3, 4
在这个例子中,我们定义了一个生成器函数get_numbers(),用于生成0~9之间的整数。filter()函数将get_numbers()生成的每个数都传递给lambda表达式,如果该数小于5,则将其保留下来,否则就丢弃。由于filter()函数返回的是一个新的生成器,因此我们可以通过for循环输出被保留下来的数。
除了常规的bool类型的True和False外,函数作为参数传递给filter()函数时,也可以返回其他类型的值。例如,下面是一个通过自定义函数返回元素平方的例子:
def square(x):
return x ** 2
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
new_list = list(filter(lambda x: x % 2 == 0, my_list))
squared_list = list(map(square, new_list))
print(squared_list) # 输出 [4, 16, 36, 64]
在这个例子中,我们先通过filter()函数过滤出my_list中的偶数元素,并将其放入一个新的列表new_list中。接着,我们定义了一个square()函数,用于计算元素的平方。最后,我们将new_list中的元素传递给square()函数,并通过map()函数对其进行处理,得到了一个由元素平方组成的列表squared_list。
综上所述,filter()函数是一个很实用的函数,能够方便地对可迭代对象中的元素进行过滤,并返回一个新的可迭代对象。它可以通过lambda表达式、自定义函数和生成器等不同的方式来实现,功能十分强大。
