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使用reportlab画图示例(含中文汉字)
Dec 03 Python
python使用post提交数据到远程url的方法
Apr 29 Python
详解Python中的array数组模块相关使用
Jul 05 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
python实现自动登录后台管理系统
Oct 18 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 Python
python实现局部图像放大
Nov 17 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 SEO优化之URL优化方法
2011/04/21 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python 列表的清空方式
2020/01/13 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Python3开发环境搭建详细教程
2020/06/18 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
大学生创业计划书的用途
2014/01/08 职场文书
高中学生评语大全
2014/04/25 职场文书
拉歌口号大全
2014/06/13 职场文书
考研英语辞职信
2015/05/13 职场文书
党组织结对共建协议书
2016/03/23 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python