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下使用状态机的教程
Apr 11 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
Python实现的多进程和多线程功能示例
May 29 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
Python基础之操作MySQL数据库
May 06 Python
Django框架模板用法详解
Jun 10 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/07/05 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
django中的ajax组件教程详解
2018/10/18 PHP
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python上传package到Pypi(代码简单)
2016/02/06 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
Python 实现微信自动回复的方法
2020/09/11 Python
会计专业应届生求职信
2013/11/24 职场文书
中秋节活动总结
2014/08/29 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
朋友聚会开场白
2015/06/01 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang