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 15 Python
Python实现保证只能运行一个脚本实例
Jun 24 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python pygame实现2048游戏
Nov 20 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
Python 导入文件过程图解
Oct 15 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
python 实现的截屏工具
May 08 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
php链表用法实例分析
2015/07/09 PHP
PHP中header用法小结
2016/05/23 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
JavaScript之自定义类型
2012/05/04 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
旅游专业职业生涯规划范文
2014/01/13 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
李敖北大演讲稿
2014/05/24 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python
Python自动化实战之接口请求的实现
2022/05/30 Python