作者leondemon (狗狗)
看板Python
標題[問題] List擴編的處理速度...
時間Fri Apr 24 04:30:09 2009
如果要針對一個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
→ Lucemia:[] + [1] 是產生新的 list, 不影響原list 04/24 07:23
→ Lucemia:list.append 是直接對原list 做動作 兩者語意上就不同 04/24 07:24
→ leondemon:不過.append比+=還要快 那似乎+=就沒意義了(懶人語法?) 04/25 00:21
推 sbrhsieh:list += [i] 多一個成本在 [i] 這個 list construction 04/25 00:44
→ ironcool:有可能需要不修改orginal object 所以+=有必要 另外由于 05/06 21:13
→ ironcool:+=也只是另外做了個name binding 不涉及到修改原object 05/06 21:15
→ sbrhsieh:aList += bList 不是另外做了 name binding, aList 指涉 05/07 00:06
→ sbrhsieh:的 list object 長度會增加 05/07 00:15