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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python中的下划线详解
Jun 24 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
python导入模块交叉引用的方法
Jan 19 Python
python字符串循环左移
Mar 08 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
总结Python使用过程中的bug
Jun 18 Python
Python3的进程和线程你了解吗
Mar 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP $_SERVER详解
2009/01/16 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
javascript 获取网页参数系统
2008/07/19 Javascript
Javascript typeof 用法
2008/12/28 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python 执行终端/控制台命令的例子
2019/07/12 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python hashlib模块实例使用详解
2019/12/24 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
机票销售员态度不好检讨书
2014/09/27 职场文书
个人自查自纠材料
2014/10/14 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
出国留学单位推荐信
2015/03/26 职场文书
《静夜思》教学反思
2016/02/17 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript