Python reverse() - List 反轉

reverse() 方法用來反轉 list 中元素的順序。

基本用法

numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(numbers)  # [5, 4, 3, 2, 1]

語法

list.reverse()
  • 回傳:None(直接修改原 list)

修改原 list

reverse() 會直接修改原 list:

fruits = ["apple", "banana", "cherry"]
result = fruits.reverse()

print(fruits)  # ['cherry', 'banana', 'apple']
print(result)  # None

reverse() vs reversed()

# reverse() - 修改原 list
numbers = [1, 2, 3]
numbers.reverse()
print(numbers)  # [3, 2, 1]

# reversed() - 回傳迭代器,不修改原 list
numbers = [1, 2, 3]
reversed_iter = reversed(numbers)
print(numbers)              # [1, 2, 3](不變)
print(list(reversed_iter))  # [3, 2, 1]

reversed() 可以用於任何序列:

# 反轉字串
s = "hello"
print("".join(reversed(s)))  # olleh

# 反轉 tuple
t = (1, 2, 3)
print(tuple(reversed(t)))  # (3, 2, 1)

# 反轉 range
r = range(5)
print(list(reversed(r)))  # [4, 3, 2, 1, 0]

切片反轉

使用切片 [::-1] 也可以反轉,但會建立新的 list:

numbers = [1, 2, 3, 4, 5]

# 切片反轉(建立新 list)
reversed_list = numbers[::-1]
print(numbers)        # [1, 2, 3, 4, 5](不變)
print(reversed_list)  # [5, 4, 3, 2, 1]

# reverse() 方法(修改原 list)
numbers.reverse()
print(numbers)  # [5, 4, 3, 2, 1]

實際範例

反轉字串

def reverse_string(s):
    return s[::-1]

# 或
def reverse_string(s):
    return "".join(reversed(s))

print(reverse_string("hello"))  # olleh

檢查回文

def is_palindrome(s):
    s = s.lower().replace(" ", "")
    return s == s[::-1]

print(is_palindrome("level"))         # True
print(is_palindrome("A man a plan a canal Panama".replace(" ", "")))  # True

反轉數字

def reverse_number(n):
    sign = -1 if n < 0 else 1
    reversed_str = str(abs(n))[::-1]
    return sign * int(reversed_str)

print(reverse_number(12345))   # 54321
print(reverse_number(-12345))  # -54321

倒序遍歷

numbers = [1, 2, 3, 4, 5]

# 方法 1:使用 reversed()
for n in reversed(numbers):
    print(n, end=" ")  # 5 4 3 2 1

# 方法 2:使用切片
for n in numbers[::-1]:
    print(n, end=" ")  # 5 4 3 2 1

# 方法 3:使用 range
for i in range(len(numbers) - 1, -1, -1):
    print(numbers[i], end=" ")  # 5 4 3 2 1

反轉連結串列中的部分元素

def reverse_sublist(lst, start, end):
    """反轉 list 中 start 到 end 的部分"""
    lst[start:end+1] = lst[start:end+1][::-1]
    return lst

numbers = [1, 2, 3, 4, 5, 6, 7]
reverse_sublist(numbers, 2, 5)
print(numbers)  # [1, 2, 6, 5, 4, 3, 7]

反轉單字順序

sentence = "Hello World Python"

# 反轉單字順序
words = sentence.split()
words.reverse()
reversed_sentence = " ".join(words)
print(reversed_sentence)  # Python World Hello

# 或用一行
reversed_sentence = " ".join(sentence.split()[::-1])
print(reversed_sentence)  # Python World Hello

雙向遍歷

numbers = [1, 2, 3, 4, 5]

# 同時從頭和尾遍歷
for i in range(len(numbers) // 2):
    front = numbers[i]
    back = numbers[-(i+1)]
    print(f"Front: {front}, Back: {back}")

輸出:

Front: 1, Back: 5
Front: 2, Back: 4

時間複雜度

  • reverse():O(n)
  • [::-1]:O(n),且需要額外空間
  • reversed():O(1)(只建立迭代器,實際遍歷時才是 O(n))