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))