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)))

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获得

来源:https://www.cnblogs.com/sight-tech/p/12987276.html

标签:python,map,for循环
0
投稿

猜你喜欢

  • python遍历文件夹下所有excel文件

    2023-10-26 17:57:12
  • python+selenium操作下拉框

    2021-11-16 13:43:30
  • python实现在列表中查找某个元素的下标示例

    2023-08-20 07:16:38
  • python moviepy 的用法入门篇

    2022-09-03 11:41:16
  • 浅谈python标准库--functools.partial

    2023-01-03 20:08:36
  • BootStrap表单控件之复选框checkbox和单选择按钮radio

    2023-08-20 09:36:22
  • Python 两个列表的差集、并集和交集实现代码

    2021-12-26 18:11:01
  • python基础教程之序列详解

    2021-05-29 23:52:04
  • 在tensorflow中实现屏蔽输出的log信息

    2023-02-27 17:41:21
  • PyTorch中的CUDA的操作方法

    2022-02-24 18:54:41
  • python和c语言哪个更适合初学者

    2022-06-22 08:23:29
  • asp使用shotgraph组件生成数字和字母验证码

    2007-09-26 12:26:00
  • Mysql如何实现不存在则插入,存在则更新

    2024-01-26 11:13:54
  • 详解Python中的魔法函数与量子计算模拟

    2021-05-18 23:13:47
  • JS 设计模式之:单例模式定义与实现方法浅析

    2024-04-29 14:10:04
  • Spark GraphX 分布式图处理框架图算法详解

    2022-11-01 14:01:40
  • 基于jupyter代码无法在pycharm中运行的解决方法

    2023-09-15 06:46:38
  • SQL Server 2000 清理日志精品图文教程

    2024-01-18 17:16:55
  • Tensorflow: 从checkpoint文件中读取tensor方式

    2022-07-20 11:39:29
  • Python 中的range(),以及列表切片方法

    2022-04-22 16:22:53
  • asp之家 网络编程 m.aspxhome.com