python-序列類型


 

 

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. 字典

     

      

 

 

 

 

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM