首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 列表反轉完全指南:reverse()、reversed() 與切片技巧

     編輯:更多程式設計知識

在 Python 中反轉列表(List)是常見操作,主要有三種方式:reverse() 原地反轉、reversed() 產生反向迭代器、以及切片語法 [::-1] 建立新列表。各有優缺點,適用情境不同。

方法一:list.reverse() — 原地反轉(最常用)

直接修改原列表,不回傳新物件(回傳 None),記憶體效率最高。

arr = [1, 2, 3]
arr.reverse()
print(arr)  # [3, 2, 1]

特點:

  • 原地操作,不產生副本
  • 時間複雜度 O(n),空間複雜度 O(1)
  • 無法直接用於 print(arr.reverse())(會印出 None)

方法二:reversed() — 產生反向迭代器

不修改原列表,回傳一個迭代器物件,需搭配 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):)
  • 需保留原列表順序
  • 記憶體敏感場合(迭代器不佔額外空間)

方法三:切片 [::-1] — 建立新列表(最 Pythonic)

語法簡潔,回傳全新列表,原列表不變,廣泛用於函式式程式設計。

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()是NoneO(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]
  • range:reversed(range(5)) 或 range(4, -1, -1)

總結

Python 提供多種列表反轉方式,核心原則:需原地修改用 reverse()、需新列表用 [::-1]、僅需反向遍歷用 reversed()。根據實際需求選擇最適合的方法,能寫出更高效、可讀性更強的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved