Python編程學習第十三課之Python的序列

       從本篇文章開始,我們要花很多的時間和精力學習一種新的概念-數據結構。數據結構是通過某種方式(如對元素進行編號)組織在一起的數據元素的集合,這些元素可以是數字或字符。

      而在Python中最基本的數據結構形式就是序列,Python中有常見的6種內建序列,分別爲列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。接下來我們先從基礎入手,看一下序列中常見的操作都有哪些。

      所有的序列都有一些通用操作,包括索引、分片、序列相加、乘法、成員資格、長度、最小值和最大值。

Python作爲一門不斷髮展與普及的語言,還在不斷更新中。在學習時,建議找一些學習夥伴一起來學習和討論,效果更佳。如果想學習Python,歡迎加入Python學習交流羣(1104627612),一起督促,一起學習。

 

1.索引

       序列是Python中最基本的數據結構。序列中的每個元素都會被分配一個數字,代表它在序列中的位置(即索引)。但是第一個索引是從0開始的,第二個索引是1,以此類推。

      根據序列中的索引值可以訪問序列中的元素值,獲取元素的方式爲:在變量後加中括號,在中括號內輸入所取元素的編號值。這裏的編號就是索引,可以通過索引獲取元素。所有序列都可以通過這種方式進行索引。

      字符串是由字符組成的序列,索引0指向第一個元素,以此類推。操作如下圖所示:

 

        示例中索引的編號是通過從左往右的方式進行獲取的,而Python中也支持從右往左的方式獲取,最右邊的元素索引值爲-1,從右向左遞減。這種從右往左的索引被稱爲負數索引;從左往右的索引稱爲正數索引。使用負數索引時,Python會從最後一個元素開始計數,最後一個元素的位置編號是-1。

 

       在這裏可以看出,直接使用索引的話,不定義變量進行引用也是可以的,直接使用索引的效果和定義變量的效果是一樣的。即便到後面,學習完畢函數之後,針對函數返回的序列,也可以對返回結果直接進行操作,後續我們會學習到。

Python作爲一門不斷髮展與普及的語言,還在不斷更新中。在學習時,建議找一些學習夥伴一起來學習和討論,效果更佳。如果想學習Python,歡迎加入Python學習交流羣(1104627612),一起督促,一起學習。

2.分片

     索引專門用來對單個元素進行訪問,使用分片可以對一定範圍內的元素進行訪問,分片的格式通過冒號相隔的兩個索引實現。操作如下圖所示:

     在這個示例操作過程中,分片操作的實現需要提供兩個索引作爲邊界,第一個索引的元素包含在分片內,第二個索引的元素不包含在分片內。類似於數學中區間的左閉右開,使用不等式表達就是a<=x<b,x是我們需要得到的元素,a是分片操作中的第一個索引,b是第二個索引,b是不包含在x的範圍之內。

      在之前學習序列的時候,序列中索引的最大值是元素個數減1,那使用分片操作的時候,如果想打印出最後一個元素,那就需要原來索引值來配合分片操作,這樣才能得到最後一個元素。

 

     那麼如果使用負數索引,如何獲得最後一個元素,按照邏輯應該如下圖所示:

 

        這個輸出和預期並不一致,不但沒有數值,只是輸出了一個空的序列。這是因爲只要在分片中最左邊的索引比它右邊的索引晚出現在序列中,結果就是一個空的序列。在序列中,索引值-3代表倒數第3個元素,0代表的是第一個元素,倒數第3個元素比第1個元素晚出現,即排在第1個元素後面,所以得到的結果是空序列。

       那麼如果我們想通過負數索引的方式獲得最後一個元素呢?在Python中有一個快捷的方式,那就是將最後一個索引置空,即可獲得我們想要的元素。操作如下圖所示:

 

       這種快捷方式同樣適合於正數索引,如果想使用置空的索引進行輸出一樣是可以的。比如我們要打印前3個元素,操作如下圖所示:

 

       如果我們想打印整個序列,那我們就有了一個快捷的方式,那麼就是置空前後兩端的索引值,這樣就可以直接輸出整個序列,操作如下圖所示:

 

       在分片操作的時候,分片取出序列中連續的元素是沒有問題的,但如果要求取出序列中非連續性的元素,就不能夠直接操作了。針對這種情況,Python中引入了一個新的參數——步長(step length),但是這個參數通常是隱式設置,索引值的中括號內就有默認的步長值1,所以如果沒有單獨書寫步長的值,分片操作時會按照默認步長值1進行遍歷後返回開始和結束點之間的所有元素。操作如下圖所示:

 

       如果我們需要取a列表中的奇數,那我們可以設置索引值的同時,設置步長值爲2。操作如下圖所示:

 

       設置前後索引值爲空,步長同樣適用,但是要注意步長值是不可爲空。步長值默認爲1,如果將步長值變更爲0,編譯時就會發生錯誤。操作如下圖所示:

 

       上述中的錯誤類型爲值錯誤:切片步長不能爲0,但是切片步長是支持負數的,如果取出a列表中的偶數,正向排列可以獲得一種,負數索引的倒序排列也可以獲得,操作如下圖所示:

 

       對於正數步長,Python會從序列的頭部開始從右提取元素,直到最後一個元素;對於負數步長,則是從序列的尾部開始向左提取元素,直到第一個元素。但是正數步長必須讓開始點小於結束點,而負數步長必須讓開始點大於結束點。如果使用了負數步長,還需要考慮序列中的索引值需要置空,否則取不到最後一個元素,操作如下圖所示:

 

 

3.序列相加

      使用算術運算符的加號可以實現序列相加的操作,相加的實質就是序列的連接。定義一個列表a = [1,2,3] b = [4,5,6],然後使用加號進行連接,輸出結果就是一個新的列表爲[1,2,3,4,5,6],操作結果如下圖所示:

 

       序列相加支持純數字的序列相加,也支持字符串序列相加。但是不能夠出現數字序列和字符串序列進行連接,否則編譯時會出現錯誤,頁面提示只能列表和列表相連。操作結果如下圖所示:

 

       所以只有類型相同的序列才能通過加號進行序列連接操作,不同類型的序列不能通過加號進行序列連接操作。

Python作爲一門不斷髮展與普及的語言,還在不斷更新中。在學習時,建議找一些學習夥伴一起來學習和討論,效果更佳。如果想學習Python,歡迎加入Python學習交流羣(1104627612),一起督促,一起學習。

 

4.序列相乘

       序列的相乘使用的是算術運算符中的乘法符號——「*」,但是這裏的乘號跟數學中的乘法完全不同,如果用一個數字a乘以1個序列b或者用一個序列b乘以一個數字a都會獲得一個新的序列,在新的序列中,原有的序列b被重複a次,這就是序列相乘的應用。操作如下圖所示:

 

       乘法通常用來創建重複序列,如果想要得到某個較長序列長度的數字,這樣可以快速得到需要的列表,操作起來較爲容易。

 

5.成員資格

       爲了檢查一個值是否在序列中,Python中可以使用in運算符來進行判斷。它用於檢驗某個條件是否爲真,並返回檢驗結果,檢驗結果爲真返回True,結果爲錯則返回False。只有True和False兩個值的結果爲布爾運算符,返回的真值和假值就是布爾值。

判斷某個字符或者某個數字是否存在於序列中,使用in運算符,如果存在於序列當中,返回結果爲True;如果不存在於序列當中,返回結果爲False。操作結果如下圖所示:

 

 

6.長度、最小值和最大值

       作爲序列的屬性值,Python提供了長度、最大值和最小值的內建函數來使用。對應的函數名稱是len、max和min。長度是指序列中元素的個數、最大值和最小值函數的參數是以序列中多個數字作爲參數,求取這些數字中的最大值和最小值。操作如下圖所示:

Python作爲一門不斷髮展與普及的語言,還在不斷更新中。在學習時,建議找一些學習夥伴一起來學習和討論,效果更佳。如果想學習Python,歡迎加入Python學習交流羣(1104627612),一起督促,一起學習。