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)工作副本與原列表
你的練習清單
- 記住索引從 0 開始。
- 切片的結束索引不包含。
- append 修改列表並回傳 None。
- 需要保留原順序時使用 sorted() 或先複製。
常見問題
append 和 extend 有什麼區別?
append 添加一個元素,即使這個元素本身是列表;extend 會把可迭代物件中的每個元素分別加進去。
為什麼排序後列表變成 None?
你可能寫了 items = items.sort()。sort() 原地排序並回傳 None;單獨呼叫 items.sort(),或者用 items = sorted(items)。
怎樣取得最後一個元素?
用 items[-1]。負索引從末尾開始,-1 就是最後一個元素。
練習列表
12 道題,覆蓋索引、切片、排序和求和。
繼續閱讀: