列表列表數據類型常見操作性能:
1,按索引賦值(v=a[i],a[i]=v)
由於鏈表的隨機存取特性,無論鏈表大小如何,這兩個操作的執行時間都是O(1)。
2.如果列表太長,可以選擇append()和_ add _()“+”。
list.append(v)的執行時間o(1)
List = list+[v],執行時間為O(n+k),因為增加了壹個新的列表,其中k是增加的列表長度。
示例:生成前n個整數列表的4種方法。
如圖所示:
我們可以計算這四個函數的時間消耗,如下所示
實施結果:
我們可以看到,四種方法的運行時間差別很大。test1使用列表連接最慢,test4使用列表範圍最快,速度相差近200倍。
如下圖所示,讓我們總結壹下list基本操作的性能:
上圖顯示pop()從列表的末尾移除元素O(1),但是pop(i)從列表的中間移除元素O(n)。為什麽?
因為是從中間移除元素,所以要將移除元素後面的所有元素都前移壹位,這樣就保證了列表可以快速按索引獲取值和賦值,達到O(1)。
字典數據類型:
字典不同於列表。dict根據鍵查找值,而list根據索引查找值。
字典中常用的Get和set的性能為O(1),而contain(in)運算判斷字典中是否有鍵也是O(1)。
list和dict在運算上的比較:
設計壹個性能測試,驗證在list中檢索壹個值,比較在dict中檢索壹個值的耗時比較。以下程序:
如果如下:
可以看出,list的in運算復雜度為O(n)。
PS:可以去python官方算法復雜度網站看看:
https://wiki.python.org/moin/TimeComplexity