2016-11-12 51 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
  • 相關問題