2011-11-11 105 views
6

可能重複:
Cost of len() function的Python:如何`LEN()`執行

的Python如何計算列表的長度(使用len()功能)是否經過forwhile循環做相同或它有一些內部變量,存儲列表的長度?

+0

http://stackoverflow.com/questions/1115313/cost-of-len-function –

+0

「x怎麼實現」和「x成本是多少」是兩個不同的問題,它們有不同的答案。 –

+1

@Petr:除了'x'的代價爲'x'如何實現提供了一個非常大的線索。例如,如果'len'在O(1)中運行,那麼可以確定存在內部變量; O(N)可能意味着它會單獨計算它們;更高意味着Python開發者是白癡。 :) – cHao

回答

4
a = range(10) 
b = range(1000000) 

timeit len(a) # 85.4 ns 
timeit len(b) # 94.4 ns 

它看起來不像一個循環。

3

從Python的角度來看,len()函數調用該類的__len__()方法,該方法返回內部已知長度。

5

它使用一個內部變量來存儲列表的長度(與Python中的所有其他可變長度對象類型一樣)。因此,len()是一個O(1)操作,不管列表的大小如何(即它在恆定時間內運行)。

這裏是implementation of len() for lists,這裏是它調用的Py_SIZE macro,這裏是Py_SIZE使用的declaration of ob_size