python的資料結構整理 001

2022-09-14 14:33:13 字數 2021 閱讀 8650

列表和元組

1.倆者特點:

1.1都是放置任意資料型別的有序集合。

1.2列表是動態的,可以隨意的增刪改查。

1.3元組是靜態的,無法改變。

針對列表空間的分配,為了減少每次增加/刪減操作空間分配的開銷,python每次分配空間時都會額外分配一些。這樣的機制(over-allocating)保證了操作的高效性,時間複雜度為o(1)。

in [1]: list001 = 

in [2]: list001.__sizeof__()

out[2]: 40

in [4]: list001.__sizeof__()

out[4]: 72

in [6]: list001.__sizeof__()

out[6]: 72

in [8]: list001.__sizeof__()

out[8]: 72

in [10]: list001.__sizeof__()

out[10]: 72

in [12]: list001.__sizeof__()

out[12]: 104

2.一些簡單對比

1.對比初始化列表和元組的耗時,明顯可以看到元組耗時更少。

kevin@192 ~ % python3 -m timeit 'x=(1,2,3,4,5)'

50000000 loops, best of 5: 6.02 nsec per loop

kevin@192 ~ % python3 -m timeit 'x=[1,2,3,4,5]'

10000000 loops, best of 5: 29.6 nsec per loop

2.對比使用和list()建立列表的方法和耗時,明顯可以看到耗時更少。

kevin@192 ~ % python3 -m timeit 'empty_list = list()'

5000000 loops, best of 5: 40.9 nsec per loop

kevin@192 ~ % python3 -m timeit 'empty_list = '

20000000 loops, best of 5: 12.8 nsec per loop

3.對比使用reverse函式和[::-1],差距並不大。

python3 -m timeit 'lista = [1,2,3,4,5]' 'listb = lista[::-1]' 'print(listb)'

kevin@192 ~ % python3 -m timeit 'lista = [1,2,3,4,5]' 'listb = lista[::-1]' 'print(listb)'

100000 loops, best of 5: 3.38 usec per loop

kevin@192 ~ % python3 -m timeit 'lista = [1,2,3,4,5]' 'lista.reverse()' 'print(lista)'

100000 loops, best of 5: 3.28 usec per loop

3.使用場景:

3.1如果儲存的資料和數量不變,選用元組更加合適,例如返回經緯度。

3.2如果儲存的資料數量是可變的,選用列表是更加合適的。

字典和集合

字典是由一系列由鍵值配對組成的元素的集合。

字典和集合唯一的區別是 集合是由一系列無序的唯一的元素組成,注意集合本質是乙個雜湊表。

1.對比初始化字典使用dict()和{},很明顯{}耗時更少。

kevin@192 ~ % python3 -m timeit "x="

5000000 loops, best of 5: 43.2 nsec per loop

kevin@192 ~ % python3 -m timeit "x=dict()"

2000000 loops, best of 5: 112 nsec per loop

資料結構00

資料結構分為邏輯結構跟物理結構,邏輯結構依賴於物理結構 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 程式的靈魂 演算法 演算法的5大基本特性 輸入 輸出 有窮性 確定性 可行性 其他特性 價效比 效率 事後統計法 比較執行時間 問題 嚴重依賴硬體和執行時環境因素,編寫相應程式 事前分析估算法 ...

資料結構整理

常見資料結構 陣列 一對一 棧佇列 鍊錶樹 一對多 圖 多對多 堆雜湊 資料結構是指相互之間存在著一種或多種關係的資料元素的集合和該集合中資料元素之間的關係組成 常用的資料結構有 陣列,棧,鍊錶,佇列,樹,圖,堆,雜湊表等,一.陣列 優點 1 按照索引查詢元素速度快 2 按照索引遍歷陣列方便 缺點 ...

資料結構與演算法開篇 00

1.有窮性 乙個演算法的操作步驟是有限的,不能是無限的 2.確定性 演算法中的每乙個步驟都要確定的詞,不能含糊不清 3.輸入 演算法具有0個或多個輸入 4.輸出 演算法至少有1個或多個輸出 5.可行性 演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成1.正確性 演算法的執行結果應當滿...