首頁>技術>

周圍越來越多的人開始學習Python,Python確實入門容易,但是精通很難。因為Python 非常靈活,對於同一件事情Python有很多種解法,技巧性非常強。

1.Dict型資料結構

字典(Dict),對映(Map)和雜湊表(Hash Table)是Python裡面的核心資料結構,類似的這樣的資料結構幾乎在所有的主流的程式語言比如Java ,C++裡面也有它的身影,都是非常重要的知識點。

1).普通字典2).順序字典

上面的只是字典的最最最基本的用法,真正在生成環境的時候,我們很多時候需要保持需要插入的順序,這個時候就要用到OrderedDict。

3).預設字典

如果你在儲存資料的時候,希望有預設的值在裡面,那麼你就應該用defaultdict,它在很多場景下面非常巧妙的用處,可以節省很多程式碼。

4).鏈式對映

當我們遇到複雜的資料結構的時候,比如需要把多個字典進行合併成一個單一的字典,進行查詢搜尋就需要用ChainMap。

2.陣列型資料結構

array陣列幾乎所有的語言都有,記得大學的時候學C語言,陣列是最開始接觸的資料結構,陣列都有一個下標,然後都是連續分配記憶體的。

因為陣列將資訊儲存在相鄰的記憶體塊中,所以被認為是連續的資料結構,很多靜態語言裡面,都是要強制初始化陣列的型別以及長度,如果陣列越界會出現定址到亂的資料,那麼Python的陣列是怎麼表示的呢?

1).list可變動態陣列3).類似C語言的array

Python裡面有一個 array模組,可以建立跟C語言很類似的陣列,array.array用法跟list很像,唯一的區別在於它只能儲存同樣地資料型別的資料。它所佔的儲存空間的大小就是資料的大小。

4).字元陣列

Python 3.x使用str物件將文字資料儲存為Unicode字元的不可變序列。這意味著 str型字串陣列是不可變的字元陣列。

3.自定的類資料結構

當你的資料結構更復雜的時候,你就會構造類來封裝你的資料結構,Python中用類來封裝有很多方法,我們下面一一給大家講解。

1).基本的類封裝

Car這個汽車類來封裝汽車的資料,比如顏色,行駛的公里數,是否自動擋,然後我們就可以對這個Car類進行初始化它的物件car1,car2,透過__init__函式來初始化物件。

2).資料類

資料類是在Python 3.7才開始有的。是一個新的模組轉為資料儲存的類,使用起來非常方便,可以讓你的物件例項將立即獲得一些有用的功能,從而節省了一些鍵入和手動實現的工作:

定義例項變數的語法較短,無需實現該.__init__()方法。資料類的例項透過自動生成的.__repr__()方法自動獲得漂亮的字串表示形式。例項變數接受型別註釋,從而使資料類在一定程度上能夠自我記錄。3).命名元組

nametuple是Python 裡面短小精悍的類,它是collection模組裡面的一個庫函式,對於封裝短小的類非常有用。讓我們可以像訪問屬性一樣去訪問類的內容。使用的效率更高更接近底層的陣列的效率,而且程式碼易讀。

4).序列化的C結構

看到struct這麼英文單詞,大家應該並不陌生,因為c/c++中就有struct,在那裡struct叫做結構體。在Python中也使用struct,Python正是使用struct模組執行Python值和C結構體之間的轉換,從而形成Python位元組物件。

4.集合

Python也有實現可變且不可變的集合和多集合資料結構。

1).set集合

用來處理去掉重複元素非常有效,多個集合可以進行運算處理,比如取兩個集合的交集,聯合等等。

3).多集

Python標準庫中的collection裡面的Counter類實現了一種多集或袋型別,這個型別允許集合中的元素出現多次,是不是很神奇,一起來看一下。

5.堆疊

棧是一個非常重要的資料結構,支援快速後進/先出(LIFO)語義插入和刪除。與列表或陣列不同,堆疊通常不允許隨機訪問它們包含的物件。插入和刪除操作通常也稱為pushpop,Python的棧使用起來要比C,C++簡單很多。

2).雙向佇列

Python的deque物件以雙向連結列表的形式實現,它的操作很像list 同時 ,相比於list實現的佇列,deque實現擁有更低的時間和空間複雜度。list實現在出隊(pop)和插入(insert)時的空間複雜度大約為O(n),deque在出隊(pop)和入隊(append)時的時間複雜度是O(1)。

雙向佇列其實有很多種妙用,尤其是在訪問佇列裡面的頭尾的資料效率非常高,而且還支援很多佇列的黑科技,比如逆時針旋轉。

3).併發裡面的佇列

當我們處理大量的資料請求的時候,比如我們需要爬大量的網站的網址,有的時候我們會將待處理的請求扔到佇列queue裡面,用多程序或者多執行緒進行併發處理。比如典型的生產者消費者的模式中就經常用到queue.

限於篇幅,還有一小部分的資料結構沒有展開,基本上Python主要的資料結構都在上面了。

羅列的很多資料結構,老司機都沒有怎麼用到。其實好的程式設計師在做專案的時候都會考慮到資料結構,用那種資料結構更節省記憶體,更加提高效率。

25
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • MySQL 8.0 的安裝和配置,操作一次感覺挺簡單的