2010-03-08 145 views
11

len(list)是否每次調用列表計算列表的長度,還是返回內置計數器的值?
我有一個背景下,我需要通過一個循環,每次檢查列表的長度,如:在python中,len(list)是做什麼的?

listData = [] 
for value in ioread(): 
    if len(listData)>=25: 
     processlistdata() 
     clearlistdata() 
    listData.append(value) 

我應該檢查len(listData)在每個迭代上,或者我應該有一個列表的長度計數器?

+4

我對99.9%的肯定表示,任何高級語言的序列類型都會存儲它的長度。 Python,Perl和Ruby(以及其他類似的語言)中的'len'(或'strlen'或'length')函數決不會花費O(N)時間。 – 2010-03-08 07:21:02

+0

我想用'for grouped in grouper替換你的代碼(ioread(),25):process(chunk)'其中'grouper()'的定義類似於http://docs.python.org/library/itertools。 html#食譜(你可能想用'izip()'替換'izip_longest()'來刪除最後一個值)。 – jfs 2010-03-08 09:23:23

+0

您是否測量了兩個版本以查看哪一個更快?使用'timeit'更容易,併發布結果,以便我們對它們發表評論。 – 2010-03-08 11:08:36

回答

16

如果您擔心此操作的性能,那麼您應該知道,該列表在Python中爲are really動態數組。也就是說,它們並沒有作爲鏈接列表來實現,你通常必須「走」來計算長度(除非存儲在標題中)。

由於他們已經需要存儲「簿記」信息來處理內存分配,因此也會存儲長度。

1
Help on built-in function len in module __builtin__: 

len(...) 
    len(object) -> integer 

    Return the number of items of a sequence or mapping. 

所以是的,len(list)返回列表中有多少項。您可能想要更詳細地描述,提供必要的輸入文件/輸出以幫助更好地理解您想要執行的操作。

+8

OP擔心這個長度是否會在每次詢問時重新計算。 – 2010-03-08 07:21:40

+0

我認爲這也取決於ioread()所做的。 – ghostdog74 2010-03-08 07:24:55

0

len(list)返回列表的長度。如果你改變它,你必須在每次迭代時檢查它的長度。或者使用一個計數器。

0

len(list)返回列表的長度。每次你調用它時,它都會返回列表的長度。您可以設置一個計數器,通過最初獲取列表的len值,然後在每次將某項內容添加到列表中時向變量加1。

相關問題