for 循环就像是一把瑞士军刀,它可以解决很多问题,但是,当你需要扫视代码,快速搞清楚代码所做的事情时,它们可能会让人不知所措。

map、filter 和 reduce 这三种技术可以提供描述迭代原因的函数替代方案,以便避免过多的 for 循环。

划重点:迭代

 什么是 Map、Filter 和 Reduce?

在写代码时 95% 的时间都花在遍历字符串或数组上。在这种情况下,一般会执行以下操作之一:将一系列语句映射到每个值,筛选满足特定条件的值,或将数据集减少为单个聚合值。

其实循环遍历通常属于这三种功能类别之一:

  • Map:对每个项应用相同的步骤集,存储结果

  • Filter:应用验证条件,存储计算结果为 True 的项

  • Reduce:返回一个从元素传递到元素的值

 Python中的 Map/Filter/Reduce 

在 Python 中,这三种技术作为函数存在,而不是数组或字符串类的方法。这意味着,得编写 map(function, my_list),而不是编写 my_array.map(function)。

此外,每个技术都需要传递一个函数,该函数将执行每个项目。通常,该函数是作为匿名函数(在 JavaScript 中称为 arrow 头函数)编写的。但是,在 Python 中,经常看到被使用的是 lambda 表达式

lambda 表达式和 arrow 函数之间的语法实际上非常相似。将 => 替换为 : 并确保使用关键字 lambda,其余的几乎相同。

// Python Lambda Expressionsquare = lambda number: number * number

arrow 函数和 lambda 表达式之间的一个关键区别是,arrow 函数能够通过多个语句扩展成完整的函数,而 lambda 表达式仅限于返回的单个表达式。因此,在使用 map()、filter()或 reduce()时,如果需要对每个项执行多个操作,请先定义函数,然后再包含它。

def inefficientSquare(number):   result = number * number   return result   map(inefficientSquare, my_list)

替换 for 循环

下面是三个常见的 for 循环示例,它们将被 map、filter 和 reduce 替换。目标:计算列表中奇数平方和。

首先,使用 基本的 for 循环示例。注意:下面的代码纯粹是为了演示,即使没有 map/filter/reduce 也有改进空间。

numbers = [1,2,3,4,5,6]odd_numbers = []squared_odd_numbers = []total = 0
# filter for odd numbersfor number in numbers:  if number % 2 == 1:     odd_numbers.append(number)
# square all odd numbersfor number in odd_numbers:  squared_odd_numbers.append(number * number)
# calculate totalfor number in squared_odd_numbers:  total += number
# calculate average

将每个步骤转换为这三个函数的其中之一:

from functools import reducenumbers = [1,2,3,4,5,6]odd_numbers = filter(lambda n: n % 2 == 1, numbers)squared_odd_numbers = map(lambda n: n * n, odd_numbers)total = reduce(lambda acc, n: acc + n, squared_odd_numbers)

有几个重要的语法要点要强调。

  • map()和 filter()本机可用。但是,reduce()必须从 Python 3 以上版本中的函数库导入

  • lambda 表达式是所有三个函数中的第一个参数,iterable 是第二个参数

  • reduce()的 lambda 表达式需要两个参数:累加器(传递给每个元素的值)和单个元素本身

via:https://medium.com/better-programming/how-to-replace-your-python-for-loops-with-map-filter-and-reduce-c1b5fa96f43a

python-用Map, Filter, Reduce代替For循环相关推荐

  1. python map filter reduce

    本文记录python中,map,filter,reduce函数的用法. 参考链接: http://www.python-course.eu/lambda.php map map(func, seq) ...

  2. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  3. 基本函数input() print() map() filter() reduce()和lambda()算子-operater用法

    #输入逗号分割的两个数字--input输入的内容,默认为字符类型 x,y =input("input:").split(",") print(x,y)#输入的多 ...

  4. python list转map_Python 进阶之术 Map Filter Reduce

    " 本文字数:763 字 || 阅读时间:3 分钟" Map  Map 会将⼀个函数映射到⼀个输⼊列表的所有元素上. 这是它的规范:规范 map(function_to_apply ...

  5. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽

    简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip. 它们都是处理序列的便捷函数.这很大程度上归功于函数式编程的 ...

  6. python之Map函数 reduce 函数

    转载:https://www.cnblogs.com/gongxr/p/7247855.html python之Map函数 # map()函数使用举例 # 功能:map()接受一个函数f和一个或多个l ...

  7. Python函数详解:函数定义、调用,lambda函数,高阶函数map,filter,reduce,函数式编程,模块化设计、代码复用、函数递归、enumerate()

    一.函数 函数是一段具有特定功能的.可重用的语句组,通过函数名来表示和调用. 函数是一段代码的抽象和封装 函数是一段具有特定功能的.可重用的语句组 函数是一种功能的抽象,表达特定功能 两个作用:降低编 ...

  8. python十九:map,filter,reduce函数

    # 处理序列中的每个元素,得到的结果是一个'列表',该'列表'元素个数及位置与原来一样 def map_practice(func, lt_num):lt_new = []for i in lt_nu ...

  9. 尾递归调用 高阶函数 map filter reduce

    #!/user/bin/env python# -*- coding:utf-8 -*-# 1.函数递归调用,函数返回值如果是另一个函数,而不是一个确切值,返回的则是这个函数的地址,需要我们加上()后 ...

最新文章

  1. spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务
  2. Oracle rac进阶管理专家指导系列文档
  3. HDU - 6610 Game(带修莫队)
  4. geek_How-To Geek正在寻找安全作家
  5. Python 多进程本机共享内存(二)
  6. codewars033: Duplicate Encoder 重复编码器
  7. centos下配置LNMP环境(源码安装)
  8. 惠普台式电脑引导不了系统_惠普电脑进入bios设置引导模式操作步骤图文
  9. Fragstats官方教程 [汉译版] 首发预告
  10. LINUX udhcpc命令
  11. meta http-equiv=refresh content=0; url=是什么意思
  12. 【文献阅读未遂】Understanding data storage and ingestion for large-scale deep recommendation model training
  13. maven创建eclipse wtp项目
  14. ZoomKeeper
  15. Eclipse创建C++工程并解决“Symbol 'std' could not be solved”
  16. postfix 邮箱设置及常见错误
  17. 计算机二级c语言考试总结,计算机二级考试C语言知识点总结 .doc
  18. sp/计算机产品与流通,计算机产品与流通杂志
  19. 宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析
  20. Pin Electronic 接口分析

热门文章

  1. IDEA打包成可执行的JAR包
  2. stm32跑马灯实验
  3. 消息服务器怎么测试,如何对服务器性能进行测试
  4. oracle expdp导出教程,Oracle Expdp Impdp 数据泵导入导出
  5. vscode 注释_VSCode最强助攻
  6. 弹性服务器怎么上传文件,上传哪个文件夹弹性云服务器
  7. python np fft_Python的武器库05:numpy模块(下)
  8. 模糊pid控制的温度系统matlab源代码_变风量空调模糊 PID 控制系统的仿真研究
  9. 简单的html5,简单的HTML5初步入门教程
  10. python自动测试g_Python自动化测试如何自动生成测试用例?