什么是 filter()?

内建函式 (built-in function)filter() 是一个内建的 Python 函式,用来过滤一个可迭代对象(例如列表、元组等)中的元素。它会根据你提供的函式来判断每个元素是否符合条件,并返回一个新的迭代器,这个迭代器包含所有符合条件的元素。

filter() 的基本用法

newlist = filter(function, iterable)

  • function: 是一个函式,用来判断每个元素是否符合条件。这个函式通常是一个 lambda 函式,因为 lambda 函式定义简单,适合用于这种场景。
  • iterable: 是要过滤的可迭代对象,比如列表、元组、字符串等。
  • newlist: 返回一个迭代器,包含所有符合条件的元素。

numbers = [1, 2, 3, 4, 5]

# 筛选出偶数
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# 将迭代器转换为列表
even_numbers_list = list(even_numbers)
print(even_numbers_list) # 输出 [2, 4]

在这个例子中:

  • lambda x: x % 2 == 0 是一个 lambda 函式,用来判断一个数是否为偶数。
  • filter() 函式会对 numbers 列表中的每个元素应用这个函式。
  • 符合条件的元素(偶数)会被保留下来,并存储在 even_numbers 迭代器中。
  • 最后,我们使用 list() 将迭代器转换为列表,以便打印结果。
  • 更进一步的例子

    # 筛选出字符串长度大于 3 的元素
    fruits = [\'apple\', \'banana\', \'cherry\', \'date\']
    long_fruits = filter(lambda x: len(x) > 3, fruits)
    print(list(long_fruits)) # 输出 [\'apple\', \'banana\', cherry\']

    小结

    filter() 函式提供了一种方便的方法来过滤序列中的元素。lambda 函式通常与 filter() 一起使用,用来定义筛选条件。filter() 返回的是一个迭代器,需要使用 list() 或其他函式将其转换为其他数据类型。

    常见应用场景

    • 筛选列表、元组中的元素
    • 根据特定条件从序列中提取元素
    • 数据清洗
    • 与其他函式结合使用,例如 map()、reduce()

    注意事项

    filter() 返回的是一个迭代器,而不是一个列表。如果你需要一个列表,需要使用 list() 将其转换。lambda 函式可以定义更复杂的筛选条件,但过于复杂的逻辑可能会降低程式码的可读性。

    总结

    filter() 函式是 Python 中一个非常有用的工具,可以帮助我们高效地处理序列数据。通过掌握 filter() 的用法,可以写出更加简洁、优雅的 Python 程式码。