2016-11-12 29 views
0
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成本,你能解释为什么吗?Python - 为什么使用map比遍历列表花费更多的时间?

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

由于

+6

你是比较苹果和橘子。一个是建立一个新的列表,另一个是就地修改列表。所以这肯定会影响运行时间。 –

+2

你应该在列表的每个元素上调用你的lambda函数,而不是'l [i] * = 2';那也会减缓'm1'。 – Evert

+2

是的,运算符比函数调用更快。 –

回答

0

m2计算经由函数调用lambda函数执行。尽管它是单行的,但它仍然是一种功能,因此具有函数调用的成本。
此外,m2创建一个新列表并将其分配给变量l,还需要考虑创建该新列表的成本。

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

m1步骤:

  1. 在列表l 2个

m2步骤创建变量l

  • 多的每个项目列表:

    1. 创建变量列表0
    2. 通过创建lambda函数的新名单打电话迭代通过列表l
    3. 分配新的列表变量l
  • 相关问题