【问题标题】:Map vs List vs loop in python 3.7python 3.7中的映射vs列表vs循环
【发布时间】:2019-02-25 12:48:33
【问题描述】:

在阅读有关 Loop 与 List comprehension 与 Map 的速度的文章时,我通​​常会发现在使用 lambda 函数时,list comprehension 比 map 更快。

这是我正在运行的测试:

import timeit

def square(range):
    squares = []
    for number in range:
        squares.append(number*number)
    return squares

print(timeit.timeit('map(lambda a: a*a, range(100))', number = 100000))
print(timeit.timeit('[a*a for a in range(100)]', number = 100000))
print(timeit.timeit('square(range(100))', 'from __main__ import square', number = 100000))

结果:

0.03845796199857432
0.5889980600004492
0.9229458660011005

因此,尽管使用 lambda 函数,但 Map 无疑是赢家。 python 3.7 是否发生了变化,导致了显着的速度提升?

【问题讨论】:

  • 尝试打印map的结果...
  • 您忘记将地图对象转换为列表

标签: python python-3.x performance list-comprehension python-3.7


【解决方案1】:

首先,要进行票价比较,您必须将map 函数的结果转换为列表。 Python 3.X 中的map 返回一个迭代器对象而不是一个列表。其次,在 CPython 实现中,内置函数实际上是围绕 c 函数的包装器,这使得它们比任何具有相同功能的 Python 代码都更快,尽管当您在内置函数中使用 lambda 时,您实际上是在打破链条,这将使其大约与 Python 代码一样快。

另一个重要的一点是列表理解只是常规循环周围的语法糖,您可以使用它来避免额外的函数调用,例如附加到列表等。

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 2012-10-02
    • 2016-08-13
    • 2016-11-01
    • 2022-01-03
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多