Python filter()函数详解
filter()函数是Python内置的一个高阶函数,它接受一个函数和一个可迭代对象作为参数,返回一个新的可迭代对象,该对象中的元素是满足函数条件的元素。
filter()函数的语法如下:
filter(function, iterable)
其中,function表示接受一个参数并返回布尔值的函数,iterable表示一个可迭代对象,可以是列表、元组、集合、字符串等。
filter()函数的工作原理如下:
1. 遍历iterable中的每个元素。
2. 对每个元素,调用function函数进行判断。
3. 如果function返回True,则将元素添加到返回的可迭代对象中。
4. 如果function返回False,则将元素忽略。
5. 返回新的可迭代对象。
例如,我们可以使用filter()函数筛选出一个列表中的所有偶数:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_even(num):
return num % 2 == 0
even_nums = filter(is_even, nums)
print(list(even_nums))
# 输出:[2, 4, 6, 8, 10]
在上面的例子中,is_even()函数接受一个参数并返回该参数是否为偶数。我们使用filter()函数将is_even()应用到nums列表中的每个元素上,得到一个新的可迭代对象even_nums,其中包含所有的偶数。我们使用list()函数将可迭代对象转换为列表,并最终打印出结果。
除了使用自定义的函数作为filter()的参数外,我们还可以使用匿名函数lambda来简化代码。例如,上面的例子可以改写如下:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = filter(lambda num: num % 2 == 0, nums)
print(list(even_nums))
# 输出:[2, 4, 6, 8, 10]
除了列表,我们还可以使用filter()函数来筛选其他类型的可迭代对象,例如字符串、元组和集合。也可以用filter()函数来筛选出满足特定条件的字符串。例如,我们可以使用filter()函数来筛选出一个列表中长度大于3的字符串:
words = ["cat", "window", "defenestrate"]
long_words = filter(lambda word: len(word) > 3, words)
print(list(long_words))
# 输出:['window', 'defenestrate']
总结一下,filter()函数是Python内置的一个强大的函数,可以根据自定义的条件筛选出可迭代对象中满足条件的元素,返回一个新的可迭代对象。我们可以使用自定义的函数或匿名函数作为filter()的参数,并可以将filter()函数应用于多种可迭代对象。使用filter()函数可以简化代码,提高效率。
