1. 程式人生 > >python教程(四)·序列

python教程(四)·序列

重新 訪問 收集 erro 直接 就是 max函數 操作 個數字

距離上次的小項目已經休息了很長一段時間,是時候來繼續本系列教程了。這一節開始我們將深入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教程(四)·序列