Python - 为什么使用map比迭代列表要花费更多时间?

时间:2016-11-12 03:14:41

标签: python

from timeit import Timer
def m1():
    l = range(100000)
    for i in l:
        l[i] *= 2

def m2():
    l = range(100000)
    l = map(lambda i:i*2,l)

if __name__ == '__main__':

    t1 = Timer('m1()','from __main__ import m1')
    print t1.timeit(100)

    t2 = Timer('m2()','from __main__ import m2')
    print t2.timeit(100)

时间m2成本超过m1成本,你能解释一下原因吗?

和map函数的实现是什么,它是否使用迭代器?

由于

1 个答案:

答案 0 :(得分:0)

m2中,计算是通过对lambda函数的函数调用来执行的。即使它是单行,它仍然有资格作为函数,因此具有函数调用的成本。
此外,m2会创建一个新列表并将其分配给变量l,还需要考虑创建该新列表的成本。

m1中,只有计算成本,因此m1更快结束。

m1步骤:

  1. 在变量l
  2. 中创建列表
  3. 列表l中的每个项目多为2
  4. m2步骤:

    1. 在变量l
    2. 中创建列表
    3. 通过遍历列表l
    4. 的lambda函数调用创建新列表
    5. 将新列表分配给变量l