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")