欢迎访问宙启技术站
智能推送

Python filter()函数详解

发布时间:2023-07-31 11:53:49

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()函数可以简化代码,提高效率。