Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
reversed():反轉序列
語法:
reversed(seq) # 回傳反轉的迭代器reversed() 會回傳一個反轉的迭代器(iterator),可以用在任何支援 __reversed__() 或同時有 __len__() 和 __getitem__() 的物件上,例如列表、元組、字串、range 等。# 反轉列表
nums = [1, 2, 3, 4, 5]
for n in reversed(nums):
print(n, end=" ") # 5 4 3 2 1
print()
# 原列表不變
print(nums) # [1, 2, 3, 4, 5]reversed() 回傳的是迭代器
reversed() 不會直接回傳列表,而是一個迭代器。如果需要列表,要用 list() 轉換。
nums = [1, 2, 3]
# 回傳迭代器
rev = reversed(nums)
print(rev) # <list_reverseiterator object at 0x...>
print(type(rev)) # <class 'list_reverseiterator'>
# 轉成列表
print(list(reversed(nums))) # [3, 2, 1]
# 轉成元組
print(tuple(reversed(nums))) # (3, 2, 1)
# 用 join 反轉字串
print("".join(reversed("hello"))) # ollehreversed() vs 切片 [::-1]
兩者都能反轉,但 reversed() 回傳迭代器(省記憶體),切片會建立新的完整物件。
nums = [1, 2, 3, 4, 5]
# 切片:建立新列表
rev_slice = nums[::-1]
print(rev_slice) # [5, 4, 3, 2, 1]
# reversed():迭代器,省記憶體
for n in reversed(nums):
print(n, end=" ") # 5 4 3 2 1
# 字串反轉比較
s = "Python"
print(s[::-1]) # nohtyP
print("".join(reversed(s))) # nohtyP搭配 range 使用
# 反轉 range
for i in reversed(range(5)):
print(i, end=" ") # 4 3 2 1 0
print()
# 等同於
for i in range(4, -1, -1):
print(i, end=" ") # 4 3 2 1 0小小綜合例子
# 回文檢查器
def is_palindrome(text):
cleaned = text.lower().replace(" ", "")
return cleaned == "".join(reversed(cleaned))
print(is_palindrome("racecar")) # True
print(is_palindrome("hello")) # False
print(is_palindrome("A man a plan a canal Panama".replace(" ", ""))) # True
# 倒序印出歷史紀錄
history = ["登入", "查看首頁", "搜尋商品", "加入購物車", "結帳"]
print("操作紀錄(最新優先):")
for i, action in enumerate(reversed(history), 1):
print(f" {i}. {action}")
# 1. 結帳
# 2. 加入購物車
# 3. 搜尋商品
# 4. 查看首頁
# 5. 登入