python 3.7中的Map vs List vs循环

问题描述 投票:0回答:1

当阅读关于Loop vs List comprehension对Map的速度的文章时,我通​​常会发现列表理解在使用lambda函数时比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

所以Map是使用lambda函数的明显赢家。 python 3.7是否有变化导致这种显着的速度提升?

python python-3.x performance list-comprehension python-3.7
1个回答
2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.