在Python中,map、filter 和 reduce 是三个非常有用的高阶函数,它们允许对序列进行操作,通常用于函数式编程。这些函数接收一个或多个函数作为参数,并将这些函数应用于可迭代对象(如序列或集合)中的元素,然后返回一个新的可迭代对象。我们将详细探讨每个函数的作用、示例和使用场景。
map(function, iterable)——10秒map 函数接受两个参数(应用函数和可迭代对象),目的是将函数应用到可迭代对象(列表或集合)中的每个元素,最后返回一个新的可迭代对象,该迭代对象由应用函数后的结果组成。
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
result = map(square, numbers)
print(list(result)) # 输出: [1, 4, 9, 16, 25]
这里我们简单地将一个求平方的函数应用到列表中的每个元素上,其执行过程如下:
square 函数应用到 numbers 列表中的每个元素;square(1) 返回 1;square(2) 返回 4;square(3) 返回 9;square(4) 返回 16;square(5) 返回 25;[1, 4, 9, 16, 25]。当你需要对列表的每个元素执行某种操作,并获取结果列表时,使用 map 是一个非常方便的选择。它特别适用于简单的元素级转换操作。
filter(function, iterable)——10秒与 map 函数一样,filter 函数接受两个参数(返回值为布尔值的函数和可迭代对象)。其目的是决定在新的可迭代对象中该保留还是丢弃旧可迭代对象中的哪些元素。新的可迭代对象中的元素就是函数返回值为 True 所对应的那些元素。它不会对元素做任何转换操作。
def is_even(x):
return x % 2 == 0
numbers = [i for i in range(1, 11)]
result = filter(is_even, numbers)
print(list(result)) # [2, 4, 6, 8, 10]
这里我们将判断一个数是否为偶数的函数应用到 numbers 列表的每个元素,分别判断每个元素是否为偶数(是则返回 True,否则返回 False),最终返回序列的元素就是 True 所对应的元素,即 **[2, 4, 6, 8, 10]**。
当你需要从一个列表中选择符合特定条件的元素时,filter 函数非常有用。它是处理数据和实现条件筛选的理想选择。
reduce(function, iterable)——10秒reduce 将一个二元函数应用到可迭代对象的每个元素上,并返回一个累积值,比如累计求和、累积求乘积等。此外,reduce 函数不是Python的内置函数,它在 functools 模块中。因此,在使用前需要先将其导入。
from functools import reduce
def cum_add(x, y):
return x + y
numbers = [i for i in range(1, 11)]
result = reduce(cum_add, numbers)
print(result) # 55
这里我们只是简单地将一个累计求和函数应用到 numbes 中的每一个元素上,所以最后返回结果是 55。
当你需要根据一个序列生成一个单一的累积结果时,例如求和、求乘积或者合并数据等操作,reduce 非常适用。它常用于需要对一系列数据进行归纳或累积操作的场景。
这三个函数都支持函数式编程范式,在处理列表、集合等数据结构时,能够让代码更简洁、更具可读性。尤其在数据处理和分析中,它们提供了很强大且方便的功能,可以有效简化复杂的操作。
“如果你觉得这篇文章对你有用,请“点赞➕关注”支持我!关注我,带你解锁更多Python实用技能、数据分析知识以及更多AI工具和新玩法!
Thank you for reading!
- END -
推荐阅读👇👇👇
Python高级技术:10个显著优化你代码的Python OOP 技术
Python的方法链:一种可以让你优雅编码的技术!相信我,你值得拥有~~
Python技巧补给站:可以向你的同事炫耀的9个技巧,赶紧收藏起来~~
Python效率秘籍:使用“*” 和“/” 让你的函数参数看起来更整洁
Pandas高级功能:提升您的数据处理技能。值得一看!(建议收藏~~)
原文作者:数据派探险家;如有侵权,请联系管理员删除。