1. 程式人生 > Python入門教學 >12 Python 資料型別詳細篇:元組

12 Python 資料型別詳細篇:元組

元組是一個和列表和相似的資料型別,兩者擁有著基本相同的特性,但是也有很多不同的地方,這節課我們來詳細的介紹下元組這個資料型別

1. 簡介

1.1 定義

元組是一個有序的只讀序列,元組中所有的元素放在 () 中間,並用逗號分開,例如:

  • (1, 2, 3),一個包含 3 個整數的元組
  • (‘a’, ‘b’, ‘c’),一個包含 3 個字串的元組

1.2 元組與列表的區別

元組與列表很相似,都是有序的只讀序列,兩者有相同的方法和操作運算,它們的區別在於:

  • 列表建立後,可以進行修改
  • 元組建立後,不能進行修改

修改列表的示例如下:

>>> x = [1, 2, 3]
>>
> x[0] = 11 >>> x [11, 2, 3]
  • 在第 1 行,建立了列表 x
  • 在第 2 行,修改列表 x 的第 0 項元素
  • 在第 3 行,顯示修改後的列表
  • 在第 4 行,結果表示修改成功了

修改元組的示例如下:

>>> y = (1, 2, 3)
>>> y[0] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>
> y (1, 2, 3)
  • 在第 1 行,建立了元組 y
  • 在第 2 行,修改元組 y 的第 0 項元素
  • 在第 3 行,提示出現 TypeError,因為 ‘tuple’ object does not support item assignment,所以無法修改
  • 在第 6 行,顯示元組 y
  • 在第 7 行,結果表示元組 y 沒有被修改

1.3 特殊的元組

如果一個元組沒有包含任何元素,使用 () 表示一個空元組,例子如下:

>>> t = ()
>>> t
()

如果一個元組只包含了一個元素 item,需要在元素後加一個逗號,使用 (item, ) 表示該元組,例子如下:

>>> t = (123, )
>>> t
(123,)

注意,(123, ) 和 (123) 兩者表示不同的含義

  • (123, ) 表示的是一個元組,元組中包含一個整數 123
  • (123) 表示的是一個帶括號的表示式,整數 123 嵌入括號中

兩者是不相同的,示例如下:

>>> t = (123, )
>>> i = (123)
>>> t == 123
False
>>> i == 123
True
  • 在第 3 行,將元組(123,) 與整數 123 比較,結果為假
  • 在第 5 行,將表示式(123) 與整數 123 比較,結果為真

1.4 元組的簡寫

當元組作在賦值操作符 = 的右邊時,可以省略括號,示例如下:

>>> t = 123, 456
>>> t
(123, 456)
>>> x = 123,
>>> x
(123, )
  • 在第 1 行,建立了元組 (123, 456)
  • 在第 4 行,建立了元組 (123,)

2. 常見運算操作

本節介紹對元組的最常見的幾種運算操作,包括:

2.1 運算子 +

使用運算子 + 連線兩個元組,示例如下:

>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
>>> (1, 2) + (3, 4) + (5, 6)
(1, 2, 3, 4, 5, 6)
  • 在第 1 行,使用運算子 + 連線兩個元組
  • 在第 3 行,使用運算子 + 連線多個元組

2.2 運算子 *

使用運算子 * 將元組的元素重複,示例如下:

>>> (1, 2) * 2
(1, 2, 1, 2)
>>> 'hello' * 3
(1, 2, 1, 2, 1, 2)
  • 在第 1 行,使用運算子 * 將字串重複兩次
  • 在第 3 行,使用運算子 + 將字串重複三次

2.4 索引 []

通過索引 [] 獲取元組中指定位置的元素,示例如下:

>>> x = ('www', 'imooc', 'com')
>>> x[0]
'www'
>>> x[1]
'imooc'
>>> x[2]
'com'
  • 在第 2 行,獲取元組 x 的第 0 個元素 ‘www’
  • 在第 4 行,獲取元組 x 的第 1 個元素 ‘imooc’
  • 在第 6 行,獲取元組 x 的第 2 個元素 ‘com’

2.5 索引 [:]

在 Python 中,使用語法 元組[start:end],獲取元組 元組 中在 [start, end) 範圍的子字串。注意範圍 [start, end) 包含 start,不包含 end。舉例如下:

>>> x = ('www', 'imooc', 'com')
>>> x[1]
'imooc'
>>> x[2]
'com'
>>> x[1:3]
['imooc', 'com']
  • 在第 2 行,獲取元組 x 的第 1 個元素 ‘imooc’
  • 在第 4 行,獲取元組 x 的第 2 個元素 ‘com’
  • 在第 6 行,獲取元組 x 中從 1 開始、到 3 結束的元組 (‘imooc’, ‘com’),使用 x[1:3] 表示該範圍,注意該範圍包括字串的第 1 個元素、不包括第 3 個元素。

2.6 關鍵字 in

通過關鍵字 in 檢查元組中是否包含指定元素,示例如下:

>>> 'imooc' in ('www', 'imooc', 'com')
True
>>> 'mooc' in ('www', 'imooc', 'com')
False
  • 在第 1 行,檢測字串 ‘imooc’ 在元組中
  • 在第 3 行,檢測字串 ‘mooc’ 不在元組中

3. 常見函式

3.1 len(元組) 函式

使用函式 len 獲取元組的長度,示例如下:

>>> len((1, 2, 3))
3
>>> len((1, 2, 3, 4))
4

3.2 max(元組) 函式

使用函式 max 獲取元組中最大的元素,示例如下:

>>> max((1, 2))
2
>>> max((1, 3, 2))
3

3.3 min(元組) 函式

使用函式 min 獲取元組中最小的元素,示例如下:

>>> min((1, 2))
1
>>> min((1, 3, 2))
1

4. 常見方法

4.1 只有列表才支援的方法

元組與列表很相似,兩者都表示一個有序的序列,它們的區別在於:

  • 列表建立後,可以進行修改
  • 元組建立後,不能進行修改

因為元組不能修改,以下方法需要對列表進行修改,因此只有列表才提供:

  • append(item) 方法,向列表中新增一個元素 item
  • insert(index, item) 方法,用於將元素 item 插入列表的指定位置
  • pop() 方法,從列表的尾部取走一個元素
  • remove(item) 方法,從列表中刪除指定元素 item
  • reverse() 方法,將列表中元素倒序排列
  • sort() 方法,對列表中元素進行排序

4.2 index(item) 方法

index(item) 方法在元組中查詢指定元素 item,如果找到元素 item,則返回元素 item 的索引;如果找不到,則丟擲異常。示例如下:

>>> x = ('www', 'imooc', 'com')
>>> x.index('imooc')
1
>>> x.index('mooc')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'mooc' is not in tuple
  • 在第 2 行,在元組中使用 index 方法查詢元素 ‘imooc’
  • 在第 3 行,顯示元素 ‘imooc’ 在元組中的索引是 1
  • 在第 4 行,在元組中使用 index 方法查詢元素 ‘mooc’
  • 在第 5 行,因為元組中沒有包含元素 ‘mooc’,顯示錯誤 “ValueError: ‘mooc’ is not in tuple”

5. 小結

一定要注意元組和列表的不同之處。一定要注意元組和列表的不同之處。一定要注意元組和列表的不同之處。重要的事情說三遍。元組一般適合用來儲存不變的資料,例如學生的基本資訊,例如地圖座標資訊等等。