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中Random和Math模块学习笔记
May 18 Python
在python中pandas的series合并方法
Nov 12 Python
python绘制散点图并标记序号的方法
Dec 11 Python
django主动抛出403异常的方法详解
Jan 04 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
Python处理mysql特殊字符的问题
Mar 02 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
python全栈开发语法总结
Nov 22 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 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下intval()和(int)转换使用与区别
2008/07/18 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
python小白切忌乱用表达式
2020/05/29 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
用Python 执行cmd命令
2020/12/18 Python
广告学专业推荐信范文
2013/11/23 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
清明扫墓感想
2015/08/11 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
Vue.Draggable实现交换位置
2022/04/07 Vue.js