在 Python 中反轉列表(List)是常見操作,主要有三種方式:reverse() 原地反轉、reversed() 產生反向迭代器、以及切片語法 [::-1] 建立新列表。各有優缺點,適用情境不同。
直接修改原列表,不回傳新物件(回傳 None),記憶體效率最高。
arr = [1, 2, 3]
arr.reverse()
print(arr) # [3, 2, 1]
print(arr.reverse())(會印出 None)不修改原列表,回傳一個迭代器物件,需搭配 list() 或迴圈使用。
arr = [1, 2, 3]
rev_iter = reversed(arr)
print(list(rev_iter)) # [3, 2, 1]
print(arr) # [1, 2, 3] 原列表不變
for x in reversed(arr):)語法簡潔,回傳全新列表,原列表不變,廣泛用於函式式程式設計。
arr = [1, 2, 3]
reversed_arr = arr[::-1]
print(reversed_arr) # [3, 2, 1]
print(arr) # [1, 2, 3]
# 部分反轉
arr = [0, 1, 2, 3, 4, 5]
print(arr[5:1:-1]) # [5, 4, 3, 2] 索引 5 到 2(不含 1)
print(arr[3::-1]) # [3, 2, 1, 0] 索引 3 到開頭
| 方法 | 修改原列表 | 回傳值 | 記憶體 | 適用情境 |
|---|---|---|---|---|
| reverse() | 是 | None | O(1) | 原地反轉、大型列表、不需保留原順序 |
| reversed() | 否 | 迭代器 | O(1) | 單次反向遍歷、記憶體受限、需保留原順序 |
| [::-1] | 否 | 新列表 | O(n) | 需新列表、函式式風格、程式碼簡潔性優先 |
# 錯誤 1:以為 reverse() 回傳新列表
new_arr = arr.reverse() # new_arr 會是 None
# 錯誤 2:直接印出 reversed() 物件
print(reversed(arr)) # 輸出類似
# 正確 1:分兩行
arr.reverse()
new_arr = arr[:] # 或 list(arr)
# 正確 2:轉為列表再印
print(list(reversed(arr)))
s[::-1](字串無 reverse() 方法)tuple(reversed(t)) 或 t[::-1]reversed(range(5)) 或 range(4, -1, -1)Python 提供多種列表反轉方式,核心原則:需原地修改用 reverse()、需新列表用 [::-1]、僅需反向遍歷用 reversed()。根據實際需求選擇最適合的方法,能寫出更高效、可讀性更強的程式碼。