6 資料容器一

在這個章節中我們要從元素(ingredients)邁向容器(containers),這句話是什麼意思?在某些應用情境下 Python 的資料容器可以讓我們將多個資料指派給一個物件。比如說我們想在 Python 中輸入美國影集六人行(Friends)的六個主要演員:

starring_1 = "Jennifer Aniston"
starring_2 = "Courteney Cox"
starring_3 = "Lisa Kudrow"
starring_4 = "Matt LeBlanc"
starring_5 = "Matthew Perry"
starring_6 = "David Schwimmer"

這是到目前為止我們儲存資料的方式,將一個文字對應給一個物件;或者我們可以利用 Python 的資料容器 list 將六組文字儲存在一個物件之中。

6.1 list

starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
print(starrings)
## ['Jennifer Aniston', 'Courteney Cox', 'Lisa Kudrow', 'Matt LeBlanc', 'Matthew Perry', 'David Schwimmer']

這是一個稱為 list 的資料容器,用中括號將資料包含起來,並且以逗號分隔。Python 中可以用來儲存資料的容器有四類:

資料容器 建立方法 特性
list 使用中括號 [] 富有彈性且能容納不同資料類型
tuple 使用小括號 () 不可以更動
dict 使用大括號 {} 並搭配鍵值與資料 使用鍵值為資料作索引
set 使用大括號 {} 儲存唯一值

list 是一種極有彈性的資料容器,它可以容納不同的資料類型。

genre = "sitcom"
no_of_episodes = 236
still_airing = False
friends = [genre, no_of_episodes, still_airing]
print(friends)
## ['sitcom', 236, False]
print(type(friends))
## <type 'list'>

6.1.1 選出 list 中的元素

跟文字切割相似,使用中括號 [] 搭配索引值就可以選出 list 中的元素。

starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
print(starrings[0])
## Jennifer Aniston
print(starrings[-1])
## David Schwimmer
print(starrings[:3])
## ['Jennifer Aniston', 'Courteney Cox', 'Lisa Kudrow']
print(starrings[3:])
## ['Matt LeBlanc', 'Matthew Perry', 'David Schwimmer']

在使用冒號(:)進行元素選擇的時候需要注意,位於冒號前索引值的元素會被包含,但位於冒號後索引值的元素則不會被包含。所以範例中 print starrings[:3] 的輸出沒有包含位於索引值 3 的 "Matt LeBlanc";但是 print starrings[3:] 的輸出則有包含位於索引值 3 的 "Matt LeBlanc"

我們來檢查一下放入 list 的不同資料,是否都還保有各自的類型,可以依照索引值選出後再請 type() 函數幫我們檢查。

genre = "sitcom"
no_of_episodes = 236
still_airing = False
friends = [genre, no_of_episodes, still_airing]
print(type(friends[0]))
## <type 'str'>
print(type(friends[1]))
## <type 'int'>
print(type(friends[2]))
## <type 'bool'>

6.2 tuple

6.2.1 建立 tuple

tuple 跟 list 很像,但是我們不能新增,刪除或者更新 tuple 中存放的元素。我們可以使用 tuple() 函數將既有的 list 轉換成為 tuple,或者在建立物件的時候使用小括號 () 藉此區別建立 list 時候所使用的中括號 []

# 使用 tuple 函數
starrings_list = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
starrings_tuple = tuple(starrings_list)
print(starrings_tuple)
## ('Jennifer Aniston', 'Courteney Cox', 'Lisa Kudrow', 'Matt LeBlanc', 'Matthew Perry', 'David Schwimmer')
print(type(starrings_tuple))
## <type 'tuple'>
# 使用小括號
starrings_tuple = ("Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer")
print(starrings_tuple)
## ('Jennifer Aniston', 'Courteney Cox', 'Lisa Kudrow', 'Matt LeBlanc', 'Matthew Perry', 'David Schwimmer')
print(type(starrings_tuple))
## <type 'tuple'>

6.2.2 tuple 元素無法做更動

假如我們在建立一個 list 的時候少輸入了一個元素,我們可以用 append() 這個方法新增漏掉的元素在尾端。

# list 可以新增
starrings_list = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry"]
starrings_list.append("David Schwimmer")
print(starrings_list)
## ['Jennifer Aniston', 'Courteney Cox', 'Lisa Kudrow', 'Matt LeBlanc', 'Matthew Perry', 'David Schwimmer']

而 tuple 因為具有無法新增,刪除或者更新的特性,因此假如我們嘗試用 append() 這個方法新增漏掉的元素,就會得到一個錯誤訊息。

# tuple 不可以新增
starrings_tuple = ("Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry")
starrings_tuple.append("David Schwimmer")