list.reverse() 將列表就地反轉,不建立新列表、不回傳值。是原地修改列表順序的最高效方式。
lst.reverse()
# 參數:無
# 回傳:None
# 效能:O(n) 時間,O(1) 額外空間
# 行為:修改原列表,首尾交換至中間
a = [136, 'xyz', 'zara', 'abc', 'xyz', 'hema']
a.reverse()
print(a) # ['hema', 'xyz', 'abc', 'zara', 'xyz', 136]
| 方式 | 程式碼 | 修改原列表 | 回傳值 | 記憶體 | 適用場景 |
|---|---|---|---|---|---|
reverse() | lst.reverse() | 是 | None | O(1) | 就地反轉大列表、記憶體敏感 |
reversed() | list(reversed(lst)) | 否 | 迭代器/新列表 | O(n) | 需保留原列表、單次遍歷 |
切片 [::-1] | lst[::-1] | 否 | 新列表 | O(n) | 簡潔建立反轉副本 |
for item in reversed(lst):
process(item)
# 或
for item in lst[::-1]:
process(item)
lst.sort()
lst.reverse() # 現在是降序
# 等價於
lst.sort(reverse=True)
class Node:
def __init__(self, val):
self.val = val
def __repr__(self):
return f'Node({self.val})'
nodes = [Node(i) for i in range(5)]
nodes.reverse()
print(nodes) # [Node(4), Node(3), Node(2), Node(1), Node(0)]
from collections import deque
dq = deque([1, 2, 3])
# deque 無 reverse(),需轉列表或用 rotate
dq = deque(reversed(dq))
print(dq) # deque([3, 2, 1])
# 錯誤:以為有回傳值
reversed_lst = lst.reverse() # None!
print(reversed_lst) # None
# 正確
lst.reverse()
# 或
reversed_lst = lst[::-1]
記住:reverse() 是動作 (Verb),執行完列表就變了;reversed()/[::-1] 是名詞 (Noun),產出新序列。語意區分清晰,用對地方程式碼才易讀。