5
考慮以下用於形成一千個數字列表的方法。用於列表的追加和連接複雜度的差異
def test1():
l = []
for i in range(1000):
l = l + [i]
return l
def test2():
l = []
for i in range(1000):
l.append(i)
print timeit.repeat(stmt=test1, number=100,repeat=2)
print timeit.repeat(stmt=test2, number=100,repeat=2)
輸出:
[0.30474191033602543, 0.3783786557587963]
[0.015134341605235302, 0.023081246200096328]
爲什麼append方法比拼接好20倍左右。 AFAIK追加具有O(1)複雜性,而級聯具有O(k)複雜性。雖然這裏的K是1.
有沒有我忽略的一些明顯的東西?
還是它採取'[0.047872320772834216,0.04017255103519537]'比追加大約2倍。 – garg10may
@ garg10may:不,它不是。看我的時間。 –
@ garg10may:和O(1)是性能的*級*,而不是精確的度量;不同的O(1)算法之間的恆定時間仍然可以改變。 –