2017-09-13 45 views
0

如果多次使用python列表中的值,將其存儲爲變量而不是訪問數組效率更高?Python:多次存儲列表值或訪問列表

例如,如果有大量的任意功能列表的同一索引處上的值的所有執行,象下面這樣:

for i in range(len(aList)): 
    funcA(aList[i]) 
    funcB(aList[i]) 
    # etc... 
    funcN(aList[i]) 

VS

for i in range(len(aList)): 
    val = aList[i] 
    funcA(val) 
    funcB(val) 
    # etc... 
    funcN(val) 
  1. 每次獲得列表中的值是否與開銷相關? documentation表明從列表中獲取項目的時間複雜度是O(1),但它沒有說明常數是多少。如果大量函數使用這個值,會不會引人注目?

  2. 編譯器能夠優化這個嗎?我在想它可能,因爲它可以判斷被調用的任何函數是否會修改該索引處的值,並根據該值是否可能更改而將值或引用保存到索引處。

  3. 如果每次查找值都沒有顯着的時間損失,爲了便於閱讀,我會傾向於將值保存到局部變量中。對此有沒有「pythonic」建議?

+0

我很小的開銷。編譯器和解釋器都不能優化它 - 它如何知道你調用的任何函數是否會修改該值?不幸的是,Python對於一種語言來說太過於動態。 –

回答

4

雖然與執行函數所用的時間相比,它在技術上更有效,但它不太可能被察覺。但是,根本不需要使用索引;只是迭代值本身而不是列表索引。

for val in aList: 
    funcA(val) 
    funcB(val) 
    ... 
    funcC(val)