Python資料型別 - 元組

在本節中,我們將介紹如何建立和使用另外一種Python資料型別-元組。Python元組類似於Python列表,不同之處在於元組是不可變的,但列表是可變的。

Python元組相對於列表的優點:

  1. 元素資料型別不同時主要使用元組,而當元素具有相同的資料型別時使用列表。
  2. 通過元組遍歷更快,因為你無法更新元組。
  3. 你可以使用元組的不可變元素作為Python字典中的一個鍵值。 列表不能作為Python字典中的一個鍵值。
  4. 元組保證了對資料的保護,因為它們是不可變的。

建立一個元組

你可以使用括號()定義Python元組,並用逗號來分隔元素。 元組可以具有任何資料型別的元素。

>>> x = (3, 'pink', 3+8j)
>>> print('x[0] =', x[0])
x[0] = 3
>>> print('x[0:2] =', x[0:2])
x[0:2] = (3, 'pink')
>>> x[0] = 4
TypeError: 'tuple' object does not support item assignment

如果元組只包含一個元素,比如說是字串,則該元組不會被視為元組,而是將其視為字串。 舉例來說明:

>>> x = ("Python")
>>> print(type(x))
<class 'str'>

你可以在這裡看到x的資料型別是str而不是tuple。 為了使它能成為一個元組,你可以在其後面新增一個逗號。

>>> x = ("Python",)
>>> print(type(x))
<class 'tuple'>

訪問元組元素

元組的元素可以通過以下任何方式訪問:

索引

索引操作符[]可以用來訪問元組的元素。 元組的索引從0開始。如果索引不在範圍內(元素未在元組中的索引處定義),則會出現IndexError。 在這裡應該指出,索引必須是一個整數,否則會出現TypeError

>>> x = (3, 'pink', 3+8j)
>>> print(x[0])
3
>>> print(x[2])
(3+8j)

負索引Negative Index:

同Python列表一樣,你可以使用負索引來訪問元組元素。

>>> l = (2, 4, 6, 8, 10)
>>> print(l[-1])
10
>>> print(l[-2])
8
>>> print(l[-3])
6

切片:

切片運算子用於從元組中提取一系列元素。

>>> l = (2, 4, 6, 8, 10)
>>> print(l[1:3])		# 列印從位置1到位置3(不含3)的元素
(4, 6)
>>> print(l[:2])		# 列印從開始到位置2(不含2)的元素
(2, 4)
>>> print(l[2:])		# 列印從位置2(包含2)開始的元素
(6, 8, 10)
>>> print(l[:])		# 列印整個列表
(2, 4, 6, 8, 10)

拼接元組

兩個元組可以同過+操作符拼接起來。

>>> l = (2, 4, 6, 8, 10)
>>> print(l + (12, 14, 16)
(2, 4, 6, 8, 10, 12, 14, 16)

刪除元組

元組元素不可刪除,因為元組是不可變的。 但是你可以使用del關鍵字來刪除整個元組。

l = (2, 4, 6, 8, 10)
del l

Python元組方法:

元組只有兩個方法,因為元組是不可變的資料型別:

Python元組方法 描述
count(a) 範圍元組中元素a的數量
index(a) 返回元組中第一個匹配元素a的索引

適用於元組的內建函式

以下列表中的內建函式適用於元組資料型別。

函式 描述
all() 當元組中的所有元素都為True時返回True。 當元組為空時,它也返回True
any() 當元組中的任何元素為True時返回True。 當元組為空時,它返回False
enumerate() 將元組的所有元素的索引和值作為元組返回。 它返回一個列舉物件
len() 返回元組中元素的數量或元組的長度
tuple() 將序列(元組,字串,字典)轉換為元組
max() 返回元組中的最大數字
min() 返回元組中的最小數字
sorted() 返回一個排序元組
sum() 返回元組中所有元素的總和

Python元組成員檢查

Python in關鍵字用來檢查給定元素是否是元組的成員。

>>> l = (2, 4, 6, 8, 10)
>>> print(5 in l)
False
>>> print(2 in l
True

Python元組遍歷

你可以使用for迴圈來遍歷一個元組。

l = (2, 4, 6, 8, 10)
for i in l:
    print(i)
2
4
6
8
10