python教程(四)·序列
距離上次的小項目已經休息了很長一段時間,是時候來繼續本系列教程了。這一節開始我們將深入python中的數據結構。
序列的概念
在python中,最基本的數據結構是序列,序列包含一個或多個元素,每個元素有一個序號,也就是元素的位置,也稱為索引。第一個索引是0,第二個是1,以此類推。
說到這裏,可能大家都想到了列表。確實,python中有好幾種內建(自帶)的序列,列表就是其中一種,當然,元組也是。其他的內建序列類型有字符串、字節串等。
至於字符串,它其實就是一個由許多字符組成的序列,索引0指向第一個字符,索引1指向第二個字符……
本系列教程主要學習列表、元組、字符串這三種序列,字節串不詳細討論。
通用序列操作
所有的序列類型都有一些共同的操作,這些操作包括:索引、分片、加法、乘法還有檢查某個元素是否包含在序列中。除此以外,python中還有一系列針對序列的內建函數。
索引
索引操作其實就是通過索引訪問元素的操作,十分簡單,況且之前也有提過,在這裏直接給出例子:
>>> s = ‘hello‘
>>> s[0] # 正向索引
‘h‘
>>> s[-1] # 反向索引
‘o‘
>>>
要註意的是,反向索引時,末尾元素的索引應該是-1,而不是-0,因為-0就是0,不然就與首元素索引重合了。
分片
索引只可以訪問一個元素,而分片可以訪問一定區間(範圍)內的元素。分片通過冒號隔開的兩個索引來實現,前一個索引表示起點(包括起點),後一個索引包括終點(不包括終點):
>>> s = ‘hello world‘
>>> s[0:5]
‘hello‘
>>> lst = [1, 2, 3, 4, 5]
>>> lst[1:-1]
[2, 3, 4]
省略第一個索引表示從首元素開始:
>>> lst = [1, 2, 3, 4, 5]
>>> lst[:3]
[1, 2, 3]
省略第二個索引表示索引的範圍包含起點以及起點之後的所有元素:
>>> lst = [1, 2, 3, 4, 5] >>> lst[1:] [2, 3, 4, 5] >>> lst[:] # 兩個索引都省略 [1, 2, 3, 4, 5]
要註意的是,下面兩種分片並不等價:
>>> lst[1:]
[2, 3, 4, 5]
>>> lst[1:-1]
[2, 3, 4]
註意:分片操作返回的序列是從原序列復制指定的範圍內的元素而生成的,在新的序列中給元素重新賦值,並不影響原序列。
我們還可以再指定一個數字來表示步長,具體看下面例子:
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[0:10:2]
[1, 3, 5, 7, 9]
上面的例子中,從索引0開始,每2個元素就取一個元素,這個2就是我所說的步長,在之前的例子中,我們的沒有提供步長,這時的步長默認就是1。
當然,步長不可以為0,步長為0將會報錯。但是步長可以是負數!,這時分片從右往左提取元素:
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> lst[3:1:-1]
[4, 3]
上面例子中,分片從索引4的元素開始,每一步取一個元素,直到索引1(不包括該元素)。
使用負數的步長常常會使人困惑,建議如無必要,還是不要使用負數的步長。
加法
通過使用加法運算符+
,我們可以進行序列的連接操作:
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> ‘hello‘ + ‘world‘
‘helloworld‘
>>> (1,2) + (3,4)
(1, 2, 3, 4)
這十分簡單,不過要註意,只有在相同類型的序列之間,才可以進行相加,不然就報錯:
>>> [1,2,3] + ‘hello‘
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
乘法
我們把一個序列與整數n相乘來生成一個新的序列,這個新的序列將被重復n次:
>>> [1,2,3] * 5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> ‘hello ‘ * 3
‘hello hello hello ‘
成員資格
我們把確認一個值是否在序列中,稱為檢查這個值在序列中的成員資格。我們可以用運算符in
來實現:
>>> lst = [1, 2, 3, 4]
>>> 1 in lst
True
>>> 0 in lst
False
字符串比較特殊,我們不僅可以檢查某個字符是否在一個字符串中,而且可以檢查某個另一個字符串是否在該字符串中:
>>> s = ‘hello world‘
>>> ‘w‘ in s
True
>>> ‘world‘ in s
True
操作序列的函數
除了上面的序列操作外,python還提供了一些內建函數用於操作序列,下面介紹最常用的len、min、max函數。
使用len函數可以得到序列的長度,也就是序列中元素的數量:
>>> lst = [1,2,3]
>>> len(lst)
3
>>> s = ‘hello‘
>>> len(s)
5
min和max函數分別返回序列中的最小和最大的元素:
>>> lst = [1,2,3,4,5]
>>> min(lst)
1
>>> max(‘hello world‘)
‘w‘
min和max函數的參數還可以是多個參數:
>>> max(3,2,4,2,5)
5
>>> min(3,2,4,2,5)
2
這個時候相當於全部參數被收集成一個列表,再從中求出最大或最小的元素
本節到此為止,讀者們好好消化,我們下期再見!
python教程(四)·序列