課程重點 · 7 分鐘閱讀

Python 列表練習:索引、切片與排序

列表是大多數初學者最早使用的資料結構,也是小錯誤的集中地。這組練習聚焦索引、切片、原地修改,以及 sort 和 sorted 的區別。

索引與切片

第一個元素在索引 0。負索引從末尾開始。切片 start:stop 包含 start、不包含 stop。如果只記一條規則,就記住結束索引不包含在結果裡。

orders = ["拿鐵", "摩卡", "茶"]
print(orders[0])
print(orders[-1])
print(orders[0:2])

讀取列表

有意識地修改列表

append 添加一個元素;remove 刪除第一個比對值;pop 按索引刪除。這些方法會原地修改列表。切片會建立新列表,所以修改切片不會影響原列表。

orders = ["拿鐵", "摩卡"]
orders.append("茶")
orders.remove("摩卡")
print(orders)

原地修改

排序、求和與 None 陷阱

sort() 回傳 None,所以不要把它的結果賦回列表。sorted() 回傳新的排序列表。sum 和 len 可以快速匯總。每加一步操作前,先 print 檢查結果。

prices = [6.0, 4.5, 3.25]
prices.sort()
print(prices)
print(sum(prices))
print(sorted(prices, reverse=True))

排序與匯總

練習:修改前先複製

prices[:] 會建立淺拷貝。想排序或修改工作副本、又不想丟掉原順序時,先複製。這樣比排序唯一一份列表、再想辦法恢復原順序更容易推理。

prices = [6.0, 4.5, 3.25]
original = prices[:]
prices.sort()
print("排序後", prices)
print("原列表", original)

工作副本與原列表

你的練習清單

常見問題

append 和 extend 有什麼區別?

append 添加一個元素,即使這個元素本身是列表;extend 會把可迭代物件中的每個元素分別加進去。

為什麼排序後列表變成 None?

你可能寫了 items = items.sort()。sort() 原地排序並回傳 None;單獨呼叫 items.sort(),或者用 items = sorted(items)。

怎樣取得最後一個元素?

用 items[-1]。負索引從末尾開始,-1 就是最後一個元素。

練習列表

12 道題,覆蓋索引、切片、排序和求和。

打開練習

繼續閱讀: