3 資料容器

在這個章節中我們要從元素(ingredients)邁向結構(collections),這句話是什麼意思?回顧一下前一章的範例,會發現我們都只有指派一個資料給一個物件,在某些應用情境下 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 將六組文字儲存在一個物件之中。

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

圖 3-1 list

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

  • list
  • tuple
  • set
  • dict

3.1 list

3.1.1 建立 list

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

genre = "sitcom"
no_of_episodes = 236
still_airing = False

friends = [genre, no_of_episodes, still_airing]
print friends
print type(friends)

圖 3-2 容納不同資料類型的 list

3.1.2 選出 list 中的元素

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

starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]

print starrings[0]
print starrings[-1]
print starrings[:3]
print starrings[3:]

圖 3-3 選出 list 中的元素

在使用冒號(:)進行元素選擇的時候需要注意,位於冒號前索引值的元素會被包含,但位於冒號後索引值的元素則不會被包含。所以範例中 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])
print type(friends[1])
print type(friends[2])

圖 3-4 容納不同資料類型的 list(2)

3.2 tuple

3.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
print type(starrings_tuple)

圖 3-5 使用 tuple() 建立 tuple

# 使用小括號
starrings_tuple = ("Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer")
print starrings_tuple
print type(starrings_tuple)

圖 3-6 使用小括號建立 tuple

3.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

圖 3-7 新增元素至 list 尾端

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

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

圖 3-8 tuple 不能夠新增元素

3.3 set

set 是一個存放唯一值(unique values)的資料容器,當我們希望可以移除重複的資料時,set 就可以派上用場。

3.3.1 建立 set

我們可以使用 set() 函數將既有的 list 轉換成為 set,或者在建立物件的時候使用大括號 {} 藉此區別建立 list 時候所使用的中括號 []

# 使用 set 函數
gender_list = ["female", "female", "female", "male", "male", "male"]
gender_set = set(gender_list)
print gender_set
print type(gender_set)

圖 3-9 使用 set() 建立 set

# 使用大括號建立
gender_set = {"female", "female", "female", "male", "male", "male"}
print gender_set
print type(gender_set)

圖 3-10 使用 set() 建立 set

3.3.2 set 無法選出裡面的元素

set 與 list 和 tuple 最大的不同點在於它沒有辦法利用中括號與索引值選取元素。

gender_set = {"female", "female", "female", "male", "male", "male"}
print gender_set[0]

圖 3-11 set 無法選出裡面的元素

3.4 dict

dict 是帶有鍵值(key)的 list。

3.4.1 建立 dict

在建立的 dict 時候我們需要使用大括號 {} 並且指派每一個資料的鍵值。

friends_dict = {
    "genre": "sitcom",
    "seasons": 10,
    "episodes": 236,
    "starrings": ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
}
print type(friends_dict)

圖 3-12 建立 dict

3.4.2 利用鍵值選出 dict 中的元素

我們在中括號 [] 中使用鍵值來選擇元素。

friends_dict = {
    "genre": "sitcom",
    "seasons": 10,
    "episodes": 236,
    "starrings": ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
}
print friends_dict["genre"]
print friends_dict["seasons"]
print friends_dict["episodes"]
print friends_dict["starrings"]

圖 3-13 利用鍵值選出 dict 中的元素

練習題

  • characters 這個 list 中選出前三個角色。
characters = ["Rachel Green", "Monica Geller", "Phoebe Buffay", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
print characters[___]
  • rgb_col_list 這個 list 轉換成一個 set rgb_col_set 並且將它印出來看看。
rgb_col_list = ["red", "green", "blue", "green", "red", "blue", "green", "green", "red", "blue"]
rgb_col_set = ___
print rgb_col_set
  • 將 Matthew Perry 從 friends_dict 中選出來並印出來。
friends_dict = {
    "genre": "sitcom",
    "seasons": 10,
    "episodes": 236,
    "starrings": ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
}

print friends_dict[___][___]

results matching ""

    No results matching ""