[問題] List擴編的處理速度...

看板Python作者 (狗狗)時間15年前 (2009/04/24 04:30), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/9 (看更多)
如果要針對一個list去增加內容時 code如下: ======= from time import time def cal(x): list = [] start = time() for i in xrange(x): list.append(i) #Line 6:可修改的一行 end = time() print end-start, len(list) x = int(raw_input("enter a number:")) cal(x) ======= 如果修改line 6為「list += [i]」 或「list = list + [i]」 測試出來的時間會有差異 我實際用做1000000次去測試list擴編的速度 使用 list.append(i) 約為0.24秒 使用 list += [i] 約為0.35秒 使用 list = list + [i] 約為49.7秒 很明顯的list = list + [i]的速度慢很多 "There should be one-- and preferably only one --obvious way to do it." 既然如此 為何Python還要允許存在這種擴編list的方式呢?有其他時機會用上嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.59.68

04/24 07:23, , 1F
[] + [1] 是產生新的 list, 不影響原list
04/24 07:23, 1F

04/24 07:24, , 2F
list.append 是直接對原list 做動作 兩者語意上就不同
04/24 07:24, 2F

04/25 00:21, , 3F
不過.append比+=還要快 那似乎+=就沒意義了(懶人語法?)
04/25 00:21, 3F

04/25 00:44, , 4F
list += [i] 多一個成本在 [i] 這個 list construction
04/25 00:44, 4F

05/06 21:13, , 5F
有可能需要不修改orginal object 所以+=有必要 另外由于
05/06 21:13, 5F

05/06 21:15, , 6F
+=也只是另外做了個name binding 不涉及到修改原object
05/06 21:15, 6F

05/07 00:06, , 7F
aList += bList 不是另外做了 name binding, aList 指涉
05/07 00:06, 7F

05/07 00:15, , 8F
的 list object 長度會增加
05/07 00:15, 8F
文章代碼(AID): #19yC_JIb (Python)
討論串 (同標題文章)
文章代碼(AID): #19yC_JIb (Python)