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重新引入被覆盖的自带function
Jul 16 Python
python写入中英文字符串到文件的方法
May 06 Python
python数据封装json格式数据
Mar 04 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
pycharm的python_stubs问题
Apr 08 Python
如何将PySpark导入Python的放实现(2种)
Apr 26 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
python RSA加密的示例
Dec 09 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
javascript帧动画(实例讲解)
2017/09/02 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
vue实现购物车列表
2020/06/30 Javascript
vue实现选中效果
2020/10/07 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
情人节寄语大全
2014/04/11 职场文书
小学优秀学生评语
2014/12/29 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Python实现8种常用抽样方法
2021/06/27 Python