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中关键字is与==的区别简述
Jul 31 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django上线部署之IIS的配置方法
Aug 22 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
Python命令行click参数用法解析
Dec 19 Python
python3下pygame如何实现显示中文
Jan 11 Python
一文详述 Python 中的 property 语法
Sep 01 Python
Python常用数字处理基本操作汇总
Sep 10 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 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
ajax在joomla中的原生态应用代码
2012/07/19 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP微信API接口类
2016/08/22 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python获取时间戳代码实例
2019/09/24 Python
python实现银行实战系统
2020/02/26 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
英国医生在线预约:Top Doctors
2019/10/30 全球购物
小学生读书活动总结
2014/06/30 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
个人年终总结怎么写
2015/03/09 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
卖车协议书范文
2016/03/23 职场文书