作者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
1F:→ Lucemia:[] + [1] 是产生新的 list, 不影响原list 04/24 07:23
2F:→ Lucemia:list.append 是直接对原list 做动作 两者语意上就不同 04/24 07:24
3F:→ leondemon:不过.append比+=还要快 那似乎+=就没意义了(懒人语法?) 04/25 00:21
4F:推 sbrhsieh:list += [i] 多一个成本在 [i] 这个 list construction 04/25 00:44
5F:→ ironcool:有可能需要不修改orginal object 所以+=有必要 另外由于 05/06 21:13
6F:→ ironcool:+=也只是另外做了个name binding 不涉及到修改原object 05/06 21:15
7F:→ sbrhsieh:aList += bList 不是另外做了 name binding, aList 指涉 05/07 00:06
8F:→ sbrhsieh:的 list object 长度会增加 05/07 00:15