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 - マップを使用するのがリストを反復するよりも時間がかかります
マップ関数の実装はイテレータを使用していますか?
おかげ
にあなたがオレンジにリンゴを比較している新しいリストを割り当てます。 1つは新しいリストを構築し、もう1つはリストをインプレースで変更することです。それは確かにランタイムに影響を与えます。 –
'l [i] * = 2'を実行する代わりに、リストの各要素に対してラムダ関数を呼び出す必要があります。それは 'm1'も遅くします。 – Evert
はい、演算子は関数呼び出しより高速です。 –