這裡的範例是可在 Python 3 執行的獨立小程式;輸出框是預先核對的結果。題庫作答時,請保留題目提供的 solve 與參數,使用 return 交回答案。模組章的雙檔範例會另外標明操作方式。
01|把相關資料放在一起
清單使用中括號,元素以逗號分隔。清單有順序,可以保存重複值,也能修改內容。為了讓處理簡單,練習時通常先讓同一份清單放相同類型的資料。空清單寫成 []。
scores = [72, 85, 72, 90]
print(scores)
print(len(scores))
print(85 in scores)
print([])[72, 85, 72, 90] 4 True []
02|索引從 0 開始
第一個元素的索引是 0,第二個是 1;長度為 n 的清單,最後一個非負索引是 n - 1。-1 可以取得最後一個元素。取值前先確認清單不為空,索引也沒有超出範圍。
fruits = ["apple", "banana", "grape"]
print(fruits[0])
print(fruits[-1])
fruits[1] = "orange"
print(fruits)apple grape ['apple', 'orange', 'grape']
03|切片:取出一段資料
items[start:stop] 包含 start、不包含 stop。省略 start 代表從開頭開始;省略 stop 代表取到結尾。切片會產生新清單。先把索引位置寫在紙上,可以避免多取或少取一個。
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])
print(numbers[:2])
print(numbers[3:])
print(numbers[::-1])[20, 30, 40] [10, 20] [40, 50] [50, 40, 30, 20, 10]
04|新增、插入與移除
append(x) 把一個元素加到尾端;insert(index, x) 插到指定位置。pop() 移除並回傳最後一個元素,也可指定索引;remove(x) 移除第一個等於 x 的元素。remove 找不到目標時會產生 ValueError。
todo = ["read", "practice"]
todo.append("review")
todo.insert(1, "take notes")
last = todo.pop()
todo.remove("read")
print(todo)
print(last)['take notes', 'practice'] review
05|指定與複製不同
backup = original 只讓另一個名字指向同一份清單,沒有複製資料。想要獨立修改一層元素,可以使用 copy()。如果元素本身還是清單,這種淺複製仍會共用內層資料,先避免把它當成完整複製。
original = [2, 4]
shared = original
copied = original.copy()
shared.append(6)
copied[0] = 99
print(original)
print(copied)[2, 4, 6] [99, 4]
06|排序、加總與空清單
sorted(items) 回傳排序後的新清單,原清單保留;items.sort() 直接改原清單,回傳 None。數字清單可用 sum、min、max;但空清單沒有最大最小值,呼叫前要先判斷。
scores = [80, 60, 90]
ordered = sorted(scores)
print(ordered)
print(scores)
print(sum(scores), min(scores), max(scores))
print(sum([]))[60, 80, 90] [80, 60, 90] 230 60 90 0
07|二維清單先取一列,再取一格
清單的元素也可以是清單。例如表格 table[1][0] 是先取第二列,再取該列第一格。每列的長度不一定相同,兩次索引都要確認範圍。
seats = [["A1", "A2"], ["B1", "B2"]]
print(seats[1][0])
seats[0][1] = "空位"
print(seats[0])B1 ['A1', '空位']
WHEN SOMETHING GOES WRONG
遇到錯誤,先檢查這裡
IndexError:多拿了一格
長度 3 的清單只有索引 0、1、2。空清單連 [0] 與 [-1] 都不能取。
把 sort() 的回傳值當成清單
原地修改的方法常回傳 None。需要新結果就用 sorted(items),需要改原資料就單獨呼叫 items.sort()。
用 [[0] * 2] * 3 建表後一起變動
外層重複的是同一份內層清單。需要三份獨立資料時,分別建立各列;先用明確的 [[0, 0], [0, 0], [0, 0]] 理解差別。
PAUSE AND TRY
先不要急著看別人的寫法
- 在四個元素的清單中,第一個與最後一個索引各是什麼?
- 比較 append([3, 4]) 與 extend([3, 4]):想加入一整個清單,還是兩個獨立元素?
- 不改變原 scores,如何取得由小到大的前三筆資料?
先用紙筆預測,再改動範例中的數字或文字。結果與預期不同時,找出最早開始不同的那一步。
把這幾件事帶走
- 清單保存順序,索引從 0 開始。
- 切片結尾不包含在結果內。
- 先確認操作是否修改原清單,以及回傳什麼。
FROM READING TO PRACTICE
用三道免費題,練習本章觀念
先做簡單題確認語法,再把幾個步驟組合起來。三題都來自本章主題的新版免費題庫,難度表示需要組合的基本概念。
延伸閱讀:Python 官方文件
以下是本章查證使用的官方資料。可以先完成入門練習,再回來查閱更完整的參數與說明。