第四天: Python List (清單):高效管理多筆資料
嗨,各位夥伴!歡迎來到我的從 Python 基礎到 Vibe Coding 遊戲開發:我的奇幻旅程的第四天。昨天我們深入探討了 IF 條件判斷式,學會了如何讓程式碼擁有決策能力。今天,我們將學習如何有效地儲存和管理大量的資料,這就要用到 Python 中非常實用的資料型態:List (清單),或者我們也常稱之為「串列」。
清單 (List) 是什麼?
想像一下,如果您有多個相關的資料需要儲存,例如一群學生的姓名、一組遊戲角色的道具,您會怎麼做?如果為每個資料都建立一個獨立的變數,那程式碼將會變得非常冗長且難以管理。這時,清單 (List) 就派上用場了!清單最大的特點就是它可以儲存多筆資料。
要建立一個清單非常簡單,您只需要使用一對方括號 [] 來標注,並用逗號 , 將資料之間隔開。
# 建立一個學生姓名清單
students = ["小明", "小華", "小杰", "小美"]
print(f"學生清單: {students}")
# 建立一個數字清單
numbers = [6-10]
print(f"數字清單: {numbers}")
清單的基礎操作:長度、索引與切片
清單建立好後,我們常常需要知道裡面有多少筆資料。這時,可以使用 len() 語法來獲取清單的資料筆數 (length)。
students = ["小明", "小華", "小杰", "小美"]
print(f"清單中的學生人數: {len(students)}") # 輸出: 4
要讀取清單中的單一資料,我們會用到 索引 (Index)。清單中的每一筆資料都會被分配一個編號,但要特別注意的是,這個編號是從 0 開始計算,而非我們習慣的 1。您也可以使用負值索引,它會從清單的尾端逆向查詢,例如 -1 代表最後一筆資料。
students = ["小明", "小華", "小杰", "小美"]
print(f"第一位學生: {students}") # 輸出: 小明
print(f"第二位學生: {students[11]}") # 輸出: 小華
print(f"倒數第一位學生: {students[-1]}") # 輸出: 小美
print(f"倒數第二位學生: {students[-2]}") # 輸出: 小杰
此外,如果我們想要一次性擷取清單中特定範圍的資料,可以使用 切片 (Slice) 技巧。切片的語法是 [起始索引:結束索引],但它不包含結束索引所指向的項目。您可以省略起始或結束索引,來表示從頭或到尾。
students = ["小明", "小華", "小杰", "小美", "阿強"]
print(f"第2到第4位學生 (不含阿強): {students[1:4]}") # 輸出: ['小華', '小杰', '小美']
print(f"從頭到第3位學生 (不含小美): {students[:3]}") # 輸出: ['小明', '小華', '小杰']
print(f"從第2位到最後: {students[1:]}") # 輸出: ['小華', '小杰', '小美', '阿強']
清單與字串的轉換
有趣的是,清單和字串 (String) 之間存在許多相似之處。您可以將字串視為由許多字元所組成的清單。因此,len() 和索引語法也適用於字串。
清單和字串也可以互相轉換:
• list() 語法:將字串轉換成清單,每個字元會成為清單的一個項目。
• split() 語法:根據指定的分隔符號,將字串分割成清單。
• join() 語法:將清單中的項目,使用指定的分隔符號結合成一個字串。
# 字串轉清單
word = "Python"
letters = list(word)
print(f"字串轉清單: {letters}") # 輸出: ['P', 'y', 't', 'h', 'o', 'n']
# 使用 split 分割字串
date_str = "2023/10/26"
date_parts = date_str.split('/')
print(f"分割後的日期: {date_parts}") # 輸出: ['2023', '10', '26']
# 清單轉字串
my_list = ["Hello", "World"]
sentence = " ".join(my_list) # 用空格連結
print(f"清單轉字串: {sentence}") # 輸出: Hello World
清單內容的修改、新增與刪除
清單是可變的 (Mutable) 資料型態,這意味著我們可以輕鬆地修改其內容。
fruits = ["apple", "banana", "cherry"]
fruits[11] = "orange" # 修改索引1的項目
print(f"修改後清單: {fruits}") # 輸出: ['apple', 'orange', 'cherry']
新增項目:
• append() 語法:在清單的末尾新增一個項目。
• extend() 語法:在清單的末尾新增多個項目,通常會傳入另一個清單。
items = ["書", "筆"]
items.append("尺")
print(f"append 後: {items}") # 輸出: ['書', '筆', '尺']
new_items = ["橡皮擦", "鉛筆"]
items.extend(new_items)
print(f"extend 後: {items}") # 輸出: ['書', '筆', '尺', '橡皮擦', '鉛筆']
刪除項目:
• remove() 語法:根據項目值來刪除第一個匹配的項目。
• pop() 語法:根據索引位置來刪除項目。如果沒有指定索引,預設會刪除並返回最後一個項目。
shopping_list = ["牛奶", "麵包", "雞蛋", "牛奶"]
shopping_list.remove("牛奶") # 刪除第一個 '牛奶'
print(f"remove 後: {shopping_list}") # 輸出: ['麵包', '雞蛋', '牛奶']
deleted_item = shopping_list.pop(0) # 刪除索引0的項目 (麵包)
print(f"pop(0) 後: {shopping_list}, 刪除的項目: {deleted_item}") # 輸出: ['雞蛋', '牛奶'], 刪除的項目: 麵包
last_item = shopping_list.pop() # 刪除最後一個項目 (牛奶)
print(f"pop() 後: {shopping_list}, 刪除的項目: {last_item}") # 輸出: ['雞蛋'], 刪除的項目: 牛奶
判斷項目是否存在與查詢索引
在處理清單時,我們經常需要檢查某個項目是否存在於清單中。這可以使用 in 關鍵字結合 If 條件判斷式來完成。
fruits = ["apple", "banana", "cherry"]
if "banana" in fruits:
print("清單中包含香蕉。")
else:
print("清單中不包含香蕉。")
如果我們確定項目存在,並且想要知道它在清單中的具體位置 (索引),可以使用 index() 語法。
fruits = ["apple", "banana", "cherry"]
index_of_banana = fruits.index("banana")
print(f"香蕉的索引位置是: {index_of_banana}") # 輸出: 1
元組 (Tuple):不可修改的清單
在清單之外,Python 還有一種類似清單的資料型態叫做 Tuple (元組)。元組和清單都可以儲存多筆資料,也支援索引和切片。然而,兩者最主要的差別在於,元組的內容一旦建立後就無法被修改或增減。元組使用圓括號 () 來標注。
# 建立一個元組
coordinates = (10, 20)
print(f"元組: {coordinates}")
# 嘗試修改元組會導致錯誤
# coordinates = 5 # 這行程式碼會報錯:TypeError: 'tuple' object does not support item assignment
當您需要儲存一組固定不變的資料時,元組會是一個更好的選擇,它能提供更好的資料完整性。
恭喜您!今天我們學習了 Python 清單的建立、基本讀取與各種操作,以及它與字串的轉換關係,同時也簡要認識了元組。這些高效的資料管理方式,將在您未來的程式開發,尤其是在遊戲中處理多個遊戲物件時,提供極大的幫助。在明天的課程中,我們將學習如何讓程式碼自動重複執行特定的任務,敬請期待!