python map比for循环快在哪


Posted in Python onSeptember 21, 2020

实验结论

  • 如果需要在循环结束后获得结果,推荐列表解析;
  • 如果不需要结果,直接使用for循环, 列表解析可以备选;
  • 除了追求代码优雅和特定规定情境,不建议使用map

如果不需要返回结果

这里有三个process, 每个任务将通过增加循环提高时间复杂度

def process1(val, type=None):
	 chr(val % 123)

	def process2(val, type):
	 if type == "list":
	  [process1(_) for _ in range(val)]
	 elif type == "for":
	  for _ in range(val):
	   process1(_)
	 elif type == "map":
	  list(map(lambda _: process1(_), range(val)))

	def process3(val, type):
	 if type == "list":
	  [process2(_, type) for _ in range(val)]
	 elif type == "for":
	  for _ in range(val):
	   process2(_, type)
	 elif type == "map":
	  list(map(lambda _: process2(_, type), range(val)))

然后通过三种循环方式,去依次执行三种任务

def list_comp():
	 [process1(i, "list") for i in range(length)]
	 # [process2(i, "list") for i in range(length)]
	 # [process3(i, "list") for i in range(length)]

	def for_loop():
	 for i in range(length):
	  process1(i, "for")
	  # process2(i, "for")
	  # process3(i, "for")

	def map_exp():
	 list(map(lambda v: process1(v, "map"), range(length)))
	 # list(map(lambda v: process2(v, "map"), range(length)))
	 # list(map(lambda v: process3(v, "map"), range(length)))

python map比for循环快在哪

python map比for循环快在哪

python map比for循环快在哪

从上述的图像中,可以直观的看到, 随着任务复杂度的提高以及数据量的增大,每个循环完成需要的时间也在增加,
但是map方式花费的时间明显比其他两种要更多。 所以在不需要返回处理结果时,选择标准for或者列表解析都可以。

因为标准for循环和列表解析方式在循环任务复杂度逐渐提高的情况下,处理时间基本没有差异。

需要返回结果

这里有三个task, 每个任务将通过增加循环提高时间复杂度

def task1(val, type=None):
	 return chr(val % 123)

	def task2(val, type):
	 if type == "list":
	  return [task1(_) for _ in range(val)]
	 elif type == "for":
	  res = list()
	  for _ in range(val):
	   res.append(task1(_))
	  return res
	 elif type == "map":
	  return list(map(lambda _: task1(_), range(val)))

	def task3(val, type):
	 if type == "list":
	  return [task2(_, type) for _ in range(val)]
	 elif type == "for":
	  res = list()
	  for _ in range(val):
	   res.append(task2(_, type))
	  return res
	 elif type == "map":
	  return list(map(lambda _: task2(_, type), range(val)))

然后通过三种循环方式,去依次执行三种任务

def list_comp():
	 # return [task1(i, "list") for i in range(length)]
	 return [task2(i, "list") for i in range(length)]
	 # return [task3(i, "list") for i in range(length)]

	def for_loop():
	 res = list()
	 for i in range(length):
	  # res.append(task1(i, "for"))
	  res.append(task2(i, "for"))
	  # res.append(task3(i, "for"))
	 return res

	def map_exp():
	 # return list(map(lambda v: task1(v, "map"), range(length)))
	 return list(map(lambda v: task2(v, "map"), range(length)))
	 # return list(map(lambda v: task3(v, "map"), range(length)))

python map比for循环快在哪

python map比for循环快在哪

python map比for循环快在哪

从上述的图像中,可以直观的看到, 随着任务复杂度的提高以及数据量的增大,每个循环完成需要的时间也在增加,
但是明显看出, 使用list_comp列表解析在, 循环需要返回处理结果的每次任务中都表现的很好,基本快于其他两种迭代方式。

而标准for循环和map方式在循环任务复杂度逐渐提高的情况下,处理时间基本没有差异。

为什么普遍认为map比for快?

我认为可能跟处理的数据量有关系,大部分场景下,使用者只测试了少量的数据(100W以下,比如这篇文章,就是数据量比较少,导致速度的区别不明显),在少量的数据集下,我们确实看到了map方式比for循环快,甚至有时候比列表解析还稍微快一点,但是当我们逐渐把数据量增加原来的100倍,这时候差距的凸现出来了。

python map比for循环快在哪

如上图,在小数据集上(100W-1KW之间), 三者消耗的时间差不多相等,但是用map方式遍历和处理,还是有一定的加速优势。
具体实验代码可以通过Github获得

以上就是python 为什么map比for循环快的详细内容,更多关于python map和for循环的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
利用python获得时间的实例说明
Mar 25 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
基于数据归一化以及Python实现方式
Jul 11 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python中如何使用insert函数
Jan 09 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
通过实例解析Python文件操作实现步骤
Sep 21 #Python
python Paramiko使用示例
Sep 21 #Python
Python引入多个模块及包的概念过程解析
Sep 21 #Python
python 偷懒技巧——使用 keyboard 录制键盘事件
Sep 21 #Python
简单了解python关键字global nonlocal区别
Sep 21 #Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 #Python
python 字符串格式化的示例
Sep 21 #Python
You might like
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
微信小程序实现批量倒计时功能
2020/11/01 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
vue实现扫码功能
2020/01/17 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
python实现聊天小程序
2018/03/13 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
高一生物教学反思
2014/01/17 职场文书
主管竞聘书范文
2014/03/31 职场文书
任命书怎么写
2014/06/04 职场文书
企业党员个人自我评价
2014/09/20 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
单位同意报考证明
2015/06/17 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
Nginx缓存设置案例详解
2021/09/15 Servers