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中的五种异常处理机制介绍
Sep 02 Python
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
tensorflow实现加载mnist数据集
Sep 08 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
python基础之文件处理知识总结
May 23 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 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/08/15 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
微信API接口大全
2015/04/15 PHP
PHP加密解密函数详解
2015/10/28 PHP
完美的php分页类
2017/10/24 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python list转置和前后反转的例子
2019/08/26 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
应届生骨科医生求职信
2013/10/31 职场文书
消防安全责任书
2014/04/14 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
三字经教学反思
2014/04/26 职场文书
啦啦队口号大全
2014/06/16 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
大学生求职自荐信
2015/03/24 职场文书
Nginx报404错误的详细解决方法
2022/07/23 Servers