Python中的filter()函数-根据给定条件从序列中过滤元素并返回一个新列表
filter()函数是Python内置的用于过滤序列的函数之一。它接受两个参数,一个是函数,一个是序列,根据给定的函数对序列中的每个元素进行判断,将符合条件的元素组成一个新的序列并返回。
函数的判断条件可以是任何可调用的对象,即函数、lambda函数或其他可调用的对象。这个可调用对象接受一个参数,代表序列中的每个元素,返回True或False来表示该元素是否符合条件。如果返回True,则该元素会被包含在新的序列中,否则将被过滤掉。
filter()函数返回一个迭代器对象,可以通过list()函数将其转换为列表,也可以直接使用for循环进行遍历。
下面是filter()函数的基本用法:
result = filter(function, sequence)
其中,function是一个可调用对象,sequence是一个序列对象。
下面通过一些示例来说明filter()函数的使用:
示例1:过滤出偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # 输出:[2, 4, 6, 8]
在这个示例中,lambda函数x: x % 2 == 0表示判断x是否为偶数。filter()函数根据lambda函数的判断结果,过滤出序列numbers中的偶数,组成一个新的列表。
示例2:过滤出长度大于等于5的字符串
strings = ['apple', 'banana', 'cherry', 'date', 'elephant'] long_strings = list(filter(lambda s: len(s) >= 5, strings)) print(long_strings) # 输出:['apple', 'banana', 'cherry', 'elephant']
在这个示例中,lambda函数s: len(s) >= 5表示判断字符串s的长度是否大于等于5。filter()函数根据lambda函数的判断结果,过滤出序列strings中长度大于等于5的字符串,组成一个新的列表。
示例3:过滤出质数
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
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
prime_numbers = list(filter(is_prime, numbers))
print(prime_numbers) # 输出:[2, 3, 5, 7]
在这个示例中,is_prime()函数判断一个数是否为质数。filter()函数根据is_prime()函数的判断结果,过滤出序列numbers中的质数,组成一个新的列表。
通过这些示例可以看出,filter()函数可以根据给定的条件,从序列中过滤出符合条件的元素,并返回一个新的列表。这在实际编程中非常有用,可以简化对序列的操作。同时,使用lambda函数可以简洁地定义判断条件,使代码更加简洁易读。
