當前位置:成語大全網 - 漢語詞典 - python內置數據類型鏈表和字典dict的性能

python內置數據類型鏈表和字典dict的性能

我們來討論壹下python兩個最重要的內置數據類型list和dictionary dict上各種操作的復雜度。

列表列表數據類型常見操作性能:

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