python map比for循环快在哪
作者:Sight Tech. 发布时间:2021-06-16 09:39:04
实验结论
如果需要在循环结束后获得结果,推荐列表解析;
如果不需要结果,直接使用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)))
从上述的图像中,可以直观的看到, 随着任务复杂度的提高以及数据量的增大,每个循环完成需要的时间也在增加,
但是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)))
从上述的图像中,可以直观的看到, 随着任务复杂度的提高以及数据量的增大,每个循环完成需要的时间也在增加,
但是明显看出, 使用list_comp列表解析在, 循环需要返回处理结果的每次任务中都表现的很好,基本快于其他两种迭代方式。
而标准for循环和map方式在循环任务复杂度逐渐提高的情况下,处理时间基本没有差异。
为什么普遍认为map比for快?
我认为可能跟处理的数据量有关系,大部分场景下,使用者只测试了少量的数据(100W以下,比如这篇文章,就是数据量比较少,导致速度的区别不明显),在少量的数据集下,我们确实看到了map方式比for循环快,甚至有时候比列表解析还稍微快一点,但是当我们逐渐把数据量增加原来的100倍,这时候差距的凸现出来了。
如上图,在小数据集上(100W-1KW之间), 三者消耗的时间差不多相等,但是用map方式遍历和处理,还是有一定的加速优势。
具体实验代码可以通过Github获得
来源:https://www.cnblogs.com/sight-tech/p/12987276.html
猜你喜欢
- 在python显示图象时,我们用matplotlib模块时会遇到图像色彩失真问题,究竟是什么原因呢,下面就来看看究竟。待显示图像为:impo
- 通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的:这些图怎么做出来呢?今天就来分享下如何一步步绘
- 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。1.Proxy 的设置urllib2 默认会使用环境变量 ht
- ASP从发布至今已经7年了,使用ASP技术已经相当成熟,自从微软推出了ASP.NET之后就逐渐停止了对ASP版本的更新。但是由于有很多人仍然
- 一.基本数据类型整数:int字符串:str(注:\t等于一个tab键)布尔值: bool列表:list 列表用[]元祖:tuple元祖用()
- 这篇文章主要介绍了Python @property原理解析和用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 10个杀手级应用的Python自动化脚本重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs
- MySQL Order By keyword是用来给记录中的数据进行分类的。MySQL Order By Keyword根据关键词分类ORD
- 示意图:html:{# 用户管理 #} <div id="userManageDiv" style=&
- 一、选取网址进行爬虫本次我们选取pixabay图片网站url=https://pixabay.com/二、选择图片右键选择查看元素来寻找图片
- 在Python中将字符串转换为集合使用 set() 类将字符串转换为集合,例如 my_set = set(my_str)。 set() 类将
- 线程间通信方法 1. 通信方法线程间使用全局变量进行通信 2. 共享
- 蓝色混迹多年,偷师学艺不少,这次花了2天时间写了点东西发出来送给需要的吧。先放个图片,我改下代码。 重构完成 IE 6 
- 大家都出书,我也很幸运的有了这本书,不过一本书的好与坏,错与对都是在于一个人的理解,web标准这个东西主要还是大家理解,理解的深
- 前言看到这篇文章我就默认你已经在你的电脑上使用 pipenv搭建好了虚拟环境并且设置好了开发环境(pycharm)。如果没有,请参照这篇文章
- 将纸的材质融为设计元素现已成为当今网页设计最热门最流行的设计趋势之一。网页设计师可以使用纸屑、硬纸板纹理材质、笔记本和记事薄构成有趣而复杂的
- 本文主要介绍Python中,class(类)的装饰器@staticmethod和@classmethod的使用示例代码和它们的区别。1、@s
- 自定义过滤器就是有一个或两个参数的Python函数: (输入)变量的值  
- 这篇文章主要讲TensorFlow中的Session的用法以及Variable。Session会话控制Session是TensorFlow为
- 通常测试人员或公司实习人员需要处理一些txt文本内容,而此时使用Python是比较方便的语言。它不光在爬取网上资料上方便,还在NLP自然语言