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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
python去除字符串中的换行符
Oct 11 Python
python实现发送邮件功能代码
Dec 14 Python
matplotlib作图添加表格实例代码
Jan 23 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
使用python爬取抖音app视频的实例代码
Dec 01 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
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
会计找工作求职信范文
2013/12/09 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
协议书的格式
2014/04/23 职场文书
考察现实表现材料
2014/05/19 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers