一.序列簡介
- 數據結構是通過某種方式組織在一起的元素的集合。
- 容器(Container)是一種Python的數據結構,基本上是包含其他對象的任意對象。序列和映射(如字典)是兩類主要的容器。集合(Set)也是容器類型。
- 序列是最基本的數據結構,是通過對數據元素進行編號將它們組織在一起的數據元素的集合。
- 成員是有序排列的,可以通過小標偏移量訪問到它的一個或者幾個成員,這類python類型統稱為序列.
- Python有6中種內建的序列:列表、元組、字符串、Unicode字符串、buffer對象、xrange對象。
官方文檔:

翻譯:
一個可迭代對象,它支持通過__getitem__()特殊方法使用整數索引高效地訪問元素,並定義了一個__len__()方法,該方法返回序列的長度。一些內置的序列類型是list、str、tuple和bytes。注意,dict也支持__getitem__()和__len__(),但它被認為是一個映射,而不是一個序列,因為查找使用任意不可變鍵,而不是整數。
collections.abc.Sequence抽象基類定義了一個比__getitem__()和__len__()更豐富的接口,增加了count(),index(),__contains__(),和__reversed__()。可以使用register()顯式注冊實現此擴展接口的類型。
二.序列的分類

注:
- 容器序列和扁平序列的區別在於,扁平序列里面的元素類型都是一樣的
- array模塊是python中實現的一種高效的數組存儲類型。它和list相似,但是所有的數組成員必須是同一種類型,在創建數組的時候,就確定了數組的類型
- deque類是python標准庫collections模塊中的一項,它提供了兩端都可以操作的序列,這意味着,在序列的前后你都可以執行添加或刪除操作。
三. 通用序列操作
1.索引(Indexing)
• 序列中的每個元素被分配一個序號,即元素的位置,稱為索引。以正數第一個元素的索引為0,正數第二個元素的索引為1,倒數第一個元素的索引為-1,以此類推。
2.分片(Slicing)
• 分片使用2個冒號分隔的3個數字來完成:[srart:end:step]
• 第一個數字表示切片開始位置(默認為0),第二個數字表示切片截止(但不包含)位置(默認為列表長度),第三個數字表示切片的步長(默認為1)
• 可以使用切片來截取列表中的任何部分,得到一個新列表,也可以通過切片來修改和刪除列表中部分元素,甚至可以通過切片操作為列表對象增加元素。
• 與使用下標訪問列表元素的方法不同,切片操作不會因為下標越界而拋出異常,而是簡單地在列表尾部截斷或者返回一個空列表,代碼具有更強的健壯性。
• step為正時,Python會從序列頭部開始向右提取元素,直到最后一個元素, start索引的元素應在end索引的元素左邊,否則將返回一個空序列;step為負時, Python會從序列尾部開始向左提取元素,直到第一個元素,這時start索引的元素應在end索引的元素右邊,否則將返回一個空序列。step不能為0。
• 當step省略時可以省略最后一個冒號或置空最后一個索引
[start:end]或[start:end:]
• 當start或end省略時要置空對應索引
[start:]或[:end]或[:]
•切片可以返回列表的淺拷貝a[:]==a
• a[:]將得到包含a所有元素的分片,是一種很有效率的復制整個列表的方法
3.加(Adding)
• 序列連接操作,只有相同類型的序列才能進行連接操作
• 實質上是創建了一個新序列並將原序列中的元素和新元素依次復制到新序列的內存空間
4.乘(Multiplying)
• 序列重復操作,用數字x乘以一個序列會產生新的序列,新的序列是原序列的重復
5.成員資格
• 使用in運算符(布爾運算符)檢查一個元素是否在序列中,返回布爾值True或False
>>> 2 in [2,3,4] True >>> [2] in [2,3,4] False >>>‘P’in ‘PYTHON’ True
6.內建函數
• len():返回序列中的元素個數
• max()、 min():返回序列中的最大或最小元素
7.迭代(iteration)
8.賦值、淺拷貝與深拷貝
①直接賦值:其實就是對象的引用(別名)。
b = a: 賦值引用,a 和 b 都指向同一個對象。
②淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。
b =a.copy(): 淺拷貝, a 和 b 是一個獨立的對象,但他們的子對象還是指向統一對象(是引用)。
如果原地修改子對象,父對象也會改變。
③深拷貝(deepcopy): copy 模塊的 deepcopy 方法,完全拷貝了父對象及其子對象。
b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父對象及其子對象,兩者是完全獨立的。
