我試圖找到列表理解的效率,但它看起來像它比正常的函數操作更昂貴。有人可以解釋嗎?Python列表理解昂貴
def squares(values):
lst = []
for x in range(values):
lst.append(x*x)
return lst
def main():
t = timeit.Timer(stmt="lst = [x*x for x in range(10)]")
print t.timeit()
t = timeit.Timer(stmt="squares",setup="from __main__ import squares")
print t.timeit()
lst = [x*x for x in range(10)]
print lst
print squares(10)
----Output:---
2.4147507644
0.0284455255965
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
對於相同的輸出,與列表理解相比,正常函數計算的時間很少。
我認爲列表理解更有效。
下面的答案解釋了您的結果 - 但值得注意的是,爲什麼列表編輯速度更快 - 循環在較低的級別執行,這意味着它可以更有效地完成。 –
@Lattyware:不,循環實際上沒有區別;它是在non-comp版本中調用速度的'.append()'調用。它需要在循環中每次查找和調用,並且每次都爲這一個元素增長列表。 comp可以一次構建列表。 –