首頁 > 軟體

Python資料型別-序列sequence

2022-01-15 16:04:35

1 概述

在前面,我們已經對Python學習做了系統的知識梳理(Python思維導圖),我們接下來把知識點分節進行細講。這一節,我們講解序列。

在介紹 Python 的常用資料型別之前,我們先看看 Python 最基本的資料結構 -——序列(sequence)。序列的一個特點就是根據索引(index,即元素的位置)來獲取序列中的元素,第一個索引是 0,第二 個索引是 1,以此類推。

所有序列型別都可以進行某些通用的操作,比如:

索引( indexing )
分片( sliceing )
迭代( iteration )
加( adding )
乘( multiplying )
除了上面這些,我們還可以檢查某個元素是否屬於序列的成員,計算序列的長度等等。
重點講索引和切片。

2 基本操作

2.1 索引 

序列中的元素可以通過索引獲取,索引從 0 開始。看看下面的例子:

>>> nums = [1, 2, 3, 4, 5] # 列表
>>> nums[0] 
1 
>>> nums[1]
2 
>>> nums[-1] # 索引 -1 表示最後一個元素 
5 
>>> s = 'abcdef' # 字串 
>>> s[0] 
'a' 
>>> s[1] 
'b' 
>>> 
>>> a = (1, 2, 3) # 元組 
>>> a[0] 
 1 
 >>> a[1] 
 2

注意到 : -1 則代表序列的最後一個元素, -2 代表倒數第二個元素,以此類推。

2.2 切片 

索參照於獲取序列中的單個元素,而分片則用於獲取序列的部分元素。分片操作需要提供兩個索引作為 邊界,中間用冒號相隔,比如:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[0:2] # 列表分片 
[1, 2] 
>>> numbers[2:5] 
[3, 4, 5] 
>>> s = 'hello, world' # 字串分片 
>>> s[0:5] 
'hello' 
>>> a = (2, 4, 6, 8, 10) # 元組分片 
>>> a[2:4] 
(6, 8)

這裡需要特別注意的是,分片有兩個索引,第 1 個索引的元素是包含在內的,而第 2 個元素的索引 則不包含在內,也就是說,numbers[2:5] 獲取的是 numbers[2], numbers[3], numbers[4],沒有包括 numbers[5] 。

下面列舉使用分片的一些技巧:

  • (1)存取最後幾個元素
  • (2)使用步長

存取最後幾個元素 :

假設需要存取序列的最後 3 個元素,我們當然可以像下面這樣做:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[3:6] 
[4, 5, 6]

有沒有更簡潔的方法呢?想到可以使用負數形式的索引,你可能會嘗試這樣做:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[-3:-1] # 實際取出的是 numbers[-3], numbers[-2] 
[4, 5] 
>>> numbers[-3:0] # 左邊索引的元素比右邊索引出現得晚,返回空序列 
[]

上面的兩種使用方式並不能正確獲取序列的最後 3 個元素, Python 提供了一個捷徑 :

(也就是說,如果希望分片包含最後一個元素,可將第 2 個索引置為空)

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[-3:] 
[6, 7, 8] 
>>> numbers[5:] 
[6, 7, 8]

如果要複製整個序列,可以將兩個索引都置為空:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> nums = numbers[:] 
>>> nums 
[1, 2, 3, 4, 5, 6, 7, 8]

使用步長 :

使用分片的時候,步長預設是 1 ,即逐個存取,我們也可以自定義步長,比如:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[0:4] 
[1, 2, 3, 4] 
>>> numbers[0:4:1] # 步長為 1,不寫也可以,預設為 1 
[1, 2, 3, 4] 
>>> numbers[0:4:2] # 步長為 2,取出 numbers[0], numbers[2] 
[1, 3]
>>> numbers[::3] # 等價於 numbers[0:8:3],取出索引為 0, 3, 6 的元素 
[1, 4, 7]

另外,步長也可以是負數,表示從右到左取元素:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[0:4:-1] 
[] 
>>> numbers[4:0:-1] # 取出索引為 4, 3, 2, 1 的元素 
[5, 4, 3, 2] 
>>> numbers[4:0:-2] # 取出索引為 4, 2 的元素 
[5, 3] 
>>> numbers[::-1] # 從右到左取出所有元素 
[8, 7, 6, 5, 4, 3, 2, 1] 
>>> numbers[::-2] # 取出索引為 7, 5, 3, 1 的元素 
[8, 6, 4, 2] 
>>> numbers[6::-2] # 取出索引為 6, 4, 2, 0 的元素 
[7, 5, 3, 1] 
>>> numbers[:6:-2] # 取出索引為 7 的元素 
[8]

這裡總結一下使用分片操作的一些方法, 分片的使用形式是 :

# 左索引:右索引:步長 
left_index:right_index:step

要牢牢記住的是 :

左邊索引的元素包括在結果之中,右邊索引的元素不包括在結果之中;
當使用一個負數作為步長時,必須讓左邊索引大於右邊索引;
對正數步長,從左向右取元素;對負數步長,從右向左取元素;

2.3 加 

序列可以進行「加法」操作,如下:

>>> [1, 2, 3] + [4, 5, 6] # 「加法」效果其實就是連線在一起 
[1, 2, 3, 4, 5, 6] 
>>> (1, 2, 3) + (4, 5, 6) 
(1, 2, 3, 4, 5, 6) 
>>> 'hello, ' + 'world!'
'hello, world!' 
>>> [1, 2, 3] + 'abc' 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: can only concatenate list (not "str") to list
#這裡需要注意的是:兩種相同型別的序列才能「加法」操作。

2.4 乘

序列可以進行「乘法」操作,比如: 

>>> 'abc' * 3 
'abcabcabc' 
>>> [0] * 3 
[0, 0, 0] 
>>> [1, 2, 3] * 3 
[1, 2, 3, 1, 2, 3, 1, 2, 3]

到此這篇關於Python資料型別-序列sequence的文章就介紹到這了,更多相關Python資料型別 序列sequence內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com