1. 程式人生 > >python資料結構部分

python資料結構部分

摘自《流暢的python一書》

2.1
內建序列型別概覽Python 標準庫用 C 實現了豐富的序列型別,列舉如下。

容器序列list、tuple 和 collections.deque 這些序列能存放不同型別的資料。
扁平序列str、bytes、bytearray、memoryview 和 array.array,這類序列只能容納一種型別容器序列存放的是它們所包含的任意型別的物件的引用,而扁平序列裡存放的是值而不是引用。換句話說,扁平序列其實是一段連續的記憶體空間。由此可見扁平序列其實更加緊湊,但是它裡面只能存放諸如字元、位元組和數值這種基礎型別。

序列型別還能按照能否被修改來分類。
可變序列list、bytearray、array.array、collections.deque 和memoryview。
不可變序列tuple、str 和 bytes。

圖 2-1 顯示了可變序列(MutableSequence)和不可變序列(Sequence)的差異,同時也能看出前者從後者那裡繼承了一些方法。雖然內建的序列型別並不是直接從 Sequence 和MutableSequence 這兩個抽象基類(Abstract Base Class,ABC)繼承而來的,但是瞭解這些基類可以幫助我們總結出那些完整的序列型別包含了哪些功能。

在這裡插入圖片描述
圖 2-1:這個 UML 類圖列舉了 collections.abc 中的幾個類(超類在左邊,箭頭從子類指向超類,斜體名稱代表抽象類和抽象方法)通過記住這些類的共有特性,把可變與不可變序列或是容器與扁平序列的概念融會貫通,在探索並學習新的序列型別時,你會更加得心應手。最重要也最基礎的序列型別應該就是列表(list)了。list 是一個可變序列,並且能同時存放不同型別的元素。作為這本書的讀者,我想你應該對它很瞭解了,因此讓我們直接開始討論列表推導(listcomprehension)吧。列表推導是一種構建列表的方法,它異常強大,然而由於相關的句法比較晦澀,人們往往不願意去用它。掌握列表推導還可以為我們開啟生成器表示式(generator expression)的大門,後者具有生成各種型別的元素並用它們來填充序列的功能。下一節就來看看這兩個概念