1. 元組
元組是個有序的序列,其中包含0個或多個對象引用。元組支持與字符串一樣的分片與步距的語法,這使得從元組中提取數據項比較容易。元組也是固定的,不能替換或刪除其中包含的任意數據項。如果需要修改有序序列,我們應該使用類別而非元組。如果要對元組進行修改,可以使用list()轉換函數將其轉換為列表,之后在產生的列表之上進行適當修改。
tuple數據類型可以作為一個函數進行調用,tuple()---不指定參數時將返回一個空元組,使用tuple作為參數時將返回該參數的淺拷貝,對其他任意參數,將嘗試把給定的對象轉換為tuple類型。該函數最多只能接受一個參數。元組也可以使用tuple()函數創建,空元組是使用空圓括號()創建的,包含一個或多個項的元組則可以使用逗號分隔進行創建。
元組只提供了兩種方法:t.count(x),返回對象x在元組中出現的次數;t.index(x),返回對象在元組t中出現的最左邊位置。
元組可以使用操作符+(連接)、*(賦值)與 [](分片),要可以使用in 與not in 來測試成員關系。
下面給出幾個分片實例:
上面這些處理過程對字符串、列表以及人員其他序列類型都是一樣的
要構成一個億元組,逗號是必須的,這里red字符串地方我們必須同時使用逗號與圓括號。
1.1 命名的元組
命名的元組與普通元組一樣,有相同的表現特征,其添加的功能就是可以根據名稱引用元組中的項,就像根據索引位置一樣,這一功能使我們可以創建數據項的聚集。
collections 模塊提供了 namedtuple()函數,該函數用於創建自定義的元組數據類型,例如:
collections.namedtuple()的第一個參數是想要創建的自定義元組數據類型的名稱,第二個參數是一個字符串,其中包含使用空格分割的名稱,每個名稱代表該元組數據類型的一項。該函數返回一個自定義的類(數據類型),用於創建命名的元組。因此,這一情況下,我們將sale與任何其他python類一樣看待,並創建類型為sale的對象,如:
這里我們廠家了包含兩個sale項的列表,也就是包含兩個自定義元組。我們也可以使用索引位置來引用元組中的項----比如,第一個銷售項的價格為sales[0][-1],但我們呢也可以使用名稱進行引用,這樣會更加清晰:
命名的元組提供的清晰與便利通常都是有用的,比如,下面另一個例子:
私有方法namedtuple._asdict()返回的是鍵-值對的映射,其中每個鍵都是元組元素的名稱,值則是對應的值,我們使用映射拆分將映射轉換為str.format()方法的鍵-值參數。
“{manufacturer} {model}”.format(**aircraft._asdict())
2. 列表
列表是包含0個或多個對象引用的有序序列,支持與字符串以及元組一樣的分片與步距語法。與字符串以及元組不同的是,列表是可變的,因此,我們可以對列表中的項機芯刪除或替換,插入、替換或刪除列表中的分片。
list數據類型可以作為函數進行調用,list()--不帶參數進行調用是將返回一個空列表;帶一個list參數時,返回該參數的淺拷貝;對任意其他參數,則嘗試將給定的對象轉換為列表。該函數值接受一個參數的情況。列表也可以不使用list()函數創建,空列表可以使用空的方括號來創建,包含一個或多個項的列表則可以使用逗號分隔的數據項(包含在[]中)序列來創建。
列表提供的方法:
任意可迭代的(列表、元組等)數據類型都可以使用序列拆分操作符進行拆分,即:* 。用於賦值操作符左邊的兩個或多個變量時,其中的一個使用*進行引導,數據項將賦值給該變量,而所有剩下的數據項將賦值給帶星號的變量,下面給出一些實例:
以這種方式使用序列拆分操作符時,表達式*rest以及類似的表達式稱為帶星號的表達式。
python還有一個相關的概念:帶星號的參數。
對列表中的數據項,科研在其上進行迭代處理,使用的語法格式是 for item in L:。如果需要改列表中的數據項,那么使用的慣用方法如下:
for i in range(len(L)):
L[i] = process(L[i])
由於列表支持分片,因此在幾種情況下,使用分片或某種列表方法可以完成同樣的功能,如:給定列表woods=['Cedar','Yew','Fir'],我們可以以如下的兩種方式擴展列表:
woods+=['Kauri','Larch'] | woods.extend(['Kauri','Larch'])
對上面兩種方法,所得結果都是列表['Cedar','Yew','Fir','Kauri','Larch']。
使用list.append()方法,可以將單個數據項添加到列表尾部。使用list.insert()方法(或者賦值給一個長度為0的分片),可以將數據項插入到列表內的任何索引位置。比如,給定列表woods=['Cedar','Yew','Fir','Spruce'],我們可以在索引位置2處插入一個新的數據項(也就是作為該列表的第三項),下面兩種方法均可以實現:
woods[2:2] = ['Pine'] | woods.insert(2,'Pine')
上面兩種方法所得的結果都是列表['Cedar','Yew','Pine','Fir','Spruce'].
通過對特定索引位置處的對象進行賦值,可以對列表中的單個數據項進行替換,比如,woods[2]='Redwood'。通過將iterable賦值給分片,可以替換整個分片,比如,woods[1:3]=['Spruce','Sugi','Rimu'],並且分片月iterable並不必須是等長的。在所有這些情況下,都會刪除分片的數據項,並插入iterable的數據項。如果iterable包含的項數比要替代的分片包含的項數少,那么這一操作會使類別變短;反之,則使得列表變成。如下例子:
對於復雜的列表,可以使用for...in 循環創建,如,假定需要生成給定時間范圍內的閏年列表,可以使用如下語句:
leaps = []
for year in range(1900,1940):
if (year%4 == 0 and year %100 !=0) or (year % 400 ==0):
leaps.append(year)
兩種表達式:
expression for item in iterable
expression for item in iterable if condition
3. 集合類型
3.1 集合
3.2 集合內涵
3.3 固定集合
4. 字典