Python的filter函数:使用及例子
发布时间:2023-06-27 01:24:55
Python的filter函数是Python中内置的一个函数。该函数用于对序列(列表、元组、集合等)中的元素进行筛选过滤,返回一个由符合条件的元素组成的新序列。该函数的基本语法如下:
filter(function, iterable)
其中,function是对每个元素进行判断的函数,iterable是要过滤的序列(可以是任何可迭代对象)。
下面是一个示例:
# 按照奇偶性进行过滤
def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
evens = list(filter(is_even, numbers))
print(evens)
输出结果为:
[2, 4, 6, 8]
上述代码中,我们定义了一个名为is_even的函数,该函数接受一个数字作为输入,如果该数字为偶数,则返回True,否则返回False。接着,我们定义了一个包含一些数字的列表numbers,并使用了filter函数对该列表进行过滤,筛选出其中所有的偶数。
除了上述基本用法外,filter函数还可以接受一个特殊的参数None,表示对序列中的所有元素进行过滤。例如,下面的代码就可以用来去除序列中的所有0值:
numbers = [1, 0, 2, 0, 3, 0, 4, 0, 5] nonzero_numbers = list(filter(None, numbers)) print(nonzero_numbers)
输出结果为:
[1, 2, 3, 4, 5]
上述代码中,我们将函数参数设为None,因此filter函数会对序列中的所有元素进行过滤。在本例中,序列中包含一些0值,过滤后得到了一个不包含0值的新序列。
除此之外,我们还可以使用lambda表达式来替代is_even等函数,使代码更加简洁。例如:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] evens = list(filter(lambda x: x % 2 == 0, numbers)) print(evens)
输出结果为:
[2, 4, 6, 8]
上述代码中,我们使用了lambda表达式来定义一个只有一行代码的匿名函数,使代码更加简洁明了。
除了列表外,filter函数还可以对其他类型的可迭代对象进行过滤,例如集合、元组等。例如:
# 集合过滤示例
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9}
evens = set(filter(lambda x: x % 2 == 0, numbers))
print(evens)
# 元组过滤示例
numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9)
evens = tuple(filter(lambda x: x % 2 == 0, numbers))
print(evens)
输出结果分别为:
{8, 2, 4, 6}
(2, 4, 6, 8)
总之,Python中的filter函数可以方便地对序列中的元素进行过滤,是一个十分实用的函数。在实际编程中,我们可以根据需要自定义不同的判断函数,并灵活运用filter函数进行过滤。
