Python filter() 函数详解:筛选条件与应用实例

Python 的 filter() 函数是一个内建函数,用于从可迭代对象(如列表、元组、集合、字典视图等)中筛选出符合特定条件(通过传入的函数判断)的元素,并返回一个迭代器(在 Python 3.x 中)或列表(在 Python 2.7 中)。

以下是 filter() 函数的基本用法和详细说明:

语法

filter(function, iterable)

参数

  • function: 这是一个接受单个参数并返回布尔值(True 或 False)的函数。filter() 会将 iterable 中的每个元素传递给这个函数,只有当函数返回 True 时,该元素才会被保留下来。
  • iterable: 这是要从中筛选元素的可迭代对象。它可以是列表、元组、字符串、字典视图(如 .keys()、.values() 或 .items())等任何可迭代的数据结构。

返回值

  • Python 3.x 返回一个迭代器对象。您可以使用 for 循环、list() 函数、tuple() 函数等将结果转换为具体的数据结构进行进一步处理。
  • Python 2.7 直接返回一个包含筛选结果的新列表。

示例

筛选出整数列表中大于 0 的数

numbers = [1, -2, 3, -4, 5, 0, 6]

def is_positive(n):
    return n > 0

positive_numbers = filter(is_positive, numbers)
print(list(positive_numbers))  # 输出: [1, 3, 5, 6]

在这个例子中,我们定义了一个名为 is_positive 的函数,它接受一个整数并返回其是否大于 0。filter() 函数将 numbers 列表中的每个元素传递给 is_positive 函数进行判断,只保留那些返回 True(即大于 0)的元素。

筛选出字符串列表中长度大于 3 的单词

words = ["apple", "cat", "banana", "dog", "elephant"]

def has_length_greater_than_three(word):
    return len(word) > 3

long_words = filter(has_length_greater_than_three, words)
print(list(long_words))  # 输出: ['apple', 'banana', 'elephant']

在这里,我们定义了一个名为 has_length_greater_than_three 的函数,它接受一个字符串并返回其长度是否大于 3。filter() 函数将 words 列表中的每个单词传递给这个函数,只保留长度大于 3 的单词。

使用 lambda 表达式简化函数定义

在很多情况下,筛选条件可以用简洁的 lambda 表达式来替代完整的函数定义。例如,上面的第一个示例可以改写为:

numbers = [1, -2, 3, -4, 5, 0, 6]
positive_numbers = filter(lambda n: n > 0, numbers)
print(list(positive_numbers))  # 输出: [1, 3, 5, 6]

这里,lambda n: n > 0 是一个匿名函数,它接受一个参数 n 并返回 n > 0 的结果,恰好满足 filter() 函数对 function 参数的要求。

总结

总结来说,filter() 函数在 Python 中提供了便捷的方法,用于根据指定条件从可迭代对象中筛选出符合条件的元素。通过传入一个返回布尔值的函数和一个可迭代对象,您可以轻松地实现各种复杂的筛选任务。在 Python 3.x 中,记得将返回的迭代器转换为所需的列表、元组等数据结构以便后续操作。


发布地址:https://www.yuque.com/worthstudy/study/gug78ielzvkxb9gz?singleDoc# 《filter()函数》

© 版权声明
THE END
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞0打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容