python-用Map, Filter, Reduce代替For循环
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 Expression
square = 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 numbers
for number in numbers:
if number % 2 == 1:
odd_numbers.append(number)
# square all odd numbers
for number in odd_numbers:
squared_odd_numbers.append(number * number)
# calculate total
for number in squared_odd_numbers:
total += number
# calculate average
将每个步骤转换为这三个函数的其中之一:
from functools import reduce
numbers = [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循环相关推荐
- python map filter reduce
本文记录python中,map,filter,reduce函数的用法. 参考链接: http://www.python-course.eu/lambda.php map map(func, seq) ...
- js数组中forEach/some/every/map/filter/reduce的区别
2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...
- 基本函数input() print() map() filter() reduce()和lambda()算子-operater用法
#输入逗号分割的两个数字--input输入的内容,默认为字符类型 x,y =input("input:").split(",") print(x,y)#输入的多 ...
- python list转map_Python 进阶之术 Map Filter Reduce
" 本文字数:763 字 || 阅读时间:3 分钟" Map Map 会将⼀个函数映射到⼀个输⼊列表的所有元素上. 这是它的规范:规范 map(function_to_apply ...
- Python 进阶之路 (五) map, filter, reduce, zip 一网打尽
简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip. 它们都是处理序列的便捷函数.这很大程度上归功于函数式编程的 ...
- python之Map函数 reduce 函数
转载:https://www.cnblogs.com/gongxr/p/7247855.html python之Map函数 # map()函数使用举例 # 功能:map()接受一个函数f和一个或多个l ...
- Python函数详解:函数定义、调用,lambda函数,高阶函数map,filter,reduce,函数式编程,模块化设计、代码复用、函数递归、enumerate()
一.函数 函数是一段具有特定功能的.可重用的语句组,通过函数名来表示和调用. 函数是一段代码的抽象和封装 函数是一段具有特定功能的.可重用的语句组 函数是一种功能的抽象,表达特定功能 两个作用:降低编 ...
- python十九:map,filter,reduce函数
# 处理序列中的每个元素,得到的结果是一个'列表',该'列表'元素个数及位置与原来一样 def map_practice(func, lt_num):lt_new = []for i in lt_nu ...
- 尾递归调用 高阶函数 map filter reduce
#!/user/bin/env python# -*- coding:utf-8 -*-# 1.函数递归调用,函数返回值如果是另一个函数,而不是一个确切值,返回的则是这个函数的地址,需要我们加上()后 ...
最新文章
- spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务
- Oracle rac进阶管理专家指导系列文档
- HDU - 6610 Game(带修莫队)
- geek_How-To Geek正在寻找安全作家
- Python 多进程本机共享内存(二)
- codewars033: Duplicate Encoder 重复编码器
- centos下配置LNMP环境(源码安装)
- 惠普台式电脑引导不了系统_惠普电脑进入bios设置引导模式操作步骤图文
- Fragstats官方教程 [汉译版] 首发预告
- LINUX udhcpc命令
- meta http-equiv=refresh content=0; url=是什么意思
- 【文献阅读未遂】Understanding data storage and ingestion for large-scale deep recommendation model training
- maven创建eclipse wtp项目
- ZoomKeeper
- Eclipse创建C++工程并解决“Symbol 'std' could not be solved”
- postfix 邮箱设置及常见错误
- 计算机二级c语言考试总结,计算机二级考试C语言知识点总结 .doc
- sp/计算机产品与流通,计算机产品与流通杂志
- 宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析
- Pin Electronic 接口分析
热门文章
- IDEA打包成可执行的JAR包
- stm32跑马灯实验
- 消息服务器怎么测试,如何对服务器性能进行测试
- oracle expdp导出教程,Oracle Expdp Impdp 数据泵导入导出
- vscode 注释_VSCode最强助攻
- 弹性服务器怎么上传文件,上传哪个文件夹弹性云服务器
- python np fft_Python的武器库05:numpy模块(下)
- 模糊pid控制的温度系统matlab源代码_变风量空调模糊 PID 控制系统的仿真研究
- 简单的html5,简单的HTML5初步入门教程
- python自动测试g_Python自动化测试如何自动生成测试用例?