Python算法教程第一章知識點:利用插入元素的例子詳解list之本質

聲明:由於中譯本翻譯過於冗餘,所以將有用處的知識點羅列出來。
微信公衆號:geekkr
本文目錄:一、利用插入元素的例子詳解list之本質
</br>
一、利用插入元素的例子詳解list之本質

代碼一:
count = 10**5
nums = []
for i in range(count):
nums.append(i)
nums.reverse() #翻轉功能
代碼二:
count = 10**5
nums = []
for i in range(count):
nums.insert(0, i)

簡析:兩段代碼的作用都是將“99999,99998,…,0”這串數字填入列表nums,但其實現方式不同。其中,第一段代碼利用循環,先將數字添加到列表nums的尾端,再利用reverse函數翻轉,從而達到目的;第二段代碼則直接利用insert函數,將數字直接添加到列表nums的首端。看似第二段代碼更加便捷,但在實際上,第二段代碼的速度下降了兩個數量級。
</br>
原理:傳統列表(即鏈表)都是通過一系列節點來實現的,除尾節點外的每個節點都有指向下一個節點的指針。而Python中的list不是由相互指向的節點組成,而是一整塊單一連續的內存區塊,即數組。在進行遍歷時,鏈表與數組的效率相差無幾;進行直接訪問時,鏈表需要從頭開始遍歷以尋找需要訪問的元素,而數組則可以通過計算來得到目標元素在內存中的位置;在進行插入時,只要知道插入元素的位置,鏈表的操作成本非常低,而數組則需要移動插入點右邊的所有元素,效率降低了許多。由此可見,上述第二段代碼每次插入元素時都需要移動所有已經插入的元素,效率低下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章