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 相关文章推荐
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
整理Python 常用string函数(收藏)
May 30 Python
Python实现的桶排序算法示例
Nov 29 Python
python感知机实现代码
Jan 18 Python
python使用装饰器作日志处理的方法
Jul 11 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
python numpy--数组的组合和分割实例
Feb 24 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php文件缓存类汇总
2014/11/21 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
jQuery中:animated选择器用法实例
2014/12/29 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Python 创建守护进程的示例
2020/09/29 Python
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
水毁工程实施方案
2014/04/01 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python中的xlrd模块使用整理
2021/06/15 Python
德生BCL3000抢先使用感受和评价
2022/04/07 无线电