跳到主要内容

内置函数:map、reduce、filter的用法和区别?

参考答案:

mapreducefilter 是 Python 中的三个内置函数,它们通常用于处理序列(如列表、元组等)或迭代器对象。下面是这三个函数的用法和区别:

  1. map 函数

map 函数用于将一个函数应用于一个或多个序列的所有项目,并返回一个迭代器,其中包含应用函数后的结果。

语法:

map(function, iterable, ...)

示例:

def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]
squared = map(square, numbers)
print(list(squared))  # 输出 [1, 4, 9, 16, 25]
  1. filter 函数

filter 函数用于过滤序列,过滤掉不符合指定条件的元素,并返回一个迭代器,其中包含符合条件的元素。

语法:

filter(function, iterable)

示例:

def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # 输出 [2, 4]
  1. reduce 函数

reduce 函数用于对序列中的元素进行累积操作,即将序列中的元素依次进行某种二元操作,并返回最终的结果。

注意:在 Python 3 中,reduce 函数已经被移到 functools 模块中。

语法:

from functools import reduce

reduce(function, iterable[, initializer])

示例:

from functools import reduce

def add(x, y):
    return x + y

numbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers)  # 输出 15

区别:

  • map 函数将一个函数应用于序列的每个元素,并返回一个新序列。
  • filter 函数根据指定的条件过滤序列中的元素,并返回一个新序列。
  • reduce 函数对序列中的元素进行累积操作,并返回最终的结果。

这三个函数都是高阶函数(higher-order functions),因为它们都接受其他函数作为参数。它们都是惰性求值(lazy evaluation)的,即它们返回的都是迭代器,不会立即计算结果,而是在需要时才进行计算。