更新於 2024/12/13閱讀時間約 7 分鐘

[Python筆記] 新手指南:使用聖誕節主題學習內建序列函式

What's up guys! 我是 Rex,今天繼續跟大家分享我的 Python 筆記。

Introduction

前幾天我們總共介紹了四個資料結構,分別是 List、Dictionary、Set 和 Tuple。如果讀者還不熟悉的話,歡迎閱讀我前幾篇文章,熟悉這些資料結構的使用方法及應用。今天的主題不是資料結構,但可以看作是資料結構應用的延伸。正題開始,這些資料結構都是可迭代的(iterable),可迭代代表一個物件可以使用 for loop 存取資料。除了前面提到的四個資料結構,還有其他資料型態,例如字串(String)也是 Iterable。今天這篇文章就將向各位讀者介紹實用的內建序列函式——enumeratezipsortedreversed

特點:

  • 簡化迭代任務:這些函式簡化了常見的任務。例如,enumerate() 讓你在迭代過程中無需手動追蹤索引,就能夠同時訪問索引和值,而 zip() 能夠無縫地將多個序列組合成對或元組。
  • 提高代碼可讀性:它們讓你的代碼更加清晰、易於理解,相比於傳統的循環或手動維護計數器,這有助於代碼的可維護性並減少錯誤的可能性。
  • 高效和優化:這些函式被內建於 Python 核心,速度更快且內存消耗更低

Coding Example

  1. enumerate() - 這個函式適用於索引for 循環中的同時需要。它會給每個迭代的元素分配一個索引,使得在處理大清單或列表時更加方便。例如,我們可以用來列出每個編號以及禮物名稱。
decorations = ["Lights", "Tree", "Ornaments", "Wreath"] 
for index, item in enumerate(decorations):
print(f"{index + 1}. {item}") # output 1. Lights 2. Tree ...
  1. zip() - 這個函式允許將一個或多個可迭代對象中的對應元素組合成一個元組。它在需要將多個列表或序列元素合併成一對時非常實用。例如,我們可以用 zip() 整理客人名單、客人住處、以及他們的禮物。
names = ["Alice", "Bob", "Charlie"]
addresses = ["Taipei", "Tainan", "Taichung"]
gifts = ["Socks", "Chocolate", "Scarf"]
for name, address, gift in zip(names, addresses, gifts):
print(f"{name} living in {address} will receive {gift}") # Alice living in Taipei will receive Socks ...
  1. sorted() - 這個函式針對可迭代對象進行排序。假設你在聖誕節收到一堆聖誕卡片,你想按照姓名字母的順序打開信封。 (下面的範例,可以看到第一個印出的信件是 Alice 寄來的)
christmas_cards = [("Bob", "感謝你的禮物!"), ("Charlie", "聖誕愉快!"), ("Alice", "聖誕快樂!"), ("David", "歡度佳節!")]

# 按照姓名第一個字母排序​
sorted_cards = sorted(christmas_cards, key=lambda card: card[0])
for card in sorted_cards:
print(f"寄件人:{card[0]}, 訊息:{card[1]}") # 寄件人:Alice, 訊息:聖誕快樂! ...
  1. reversed() - 函式由後往前讀取可迭代對象的元素。例如,如果你想先打開最先收到的信,然後逐步打開比較早收到的信,可以使用 reversed() 函式來顯示收到的信件倒序排列。這樣做可以讓你優先查看最新收到的信件。
christmas_cards = [("Bob", "感謝你的禮物!"), ("Charlie", "聖誕愉快!"), ("Alice", "聖誕快樂!"), ("David", "歡度佳節!")]

# 按照姓名第一個字母排序​
reversed_cards = list(reversed(christmas_cards))
for card in sorted_cards:
print(f"寄件人:{card[0]}, 訊息:{card[1]}") # 寄件人:David, 訊息:歡度佳節!

[備註: 雖然以上的例子都是以 List 儲存資料,但讀者們可以嘗試將其換成其他型態來儲存資料,其實只要是 iterable 都行得通!]

今天的內容也相對簡單,我這邊介紹了書中所提到的所有內建序列函式。就我的經驗而言,zip()enumerate() 是我在專案中最常看到的兩個用法,請各位讀者務必多加練習!在教學的最後,我會提到兩個與元組相關的 coding 題目以及一個觀念題。邀請各位讀者一起練習,希望大家能夠透過這些練習,進一步加深對這些內建函式的理解和應用。

Coding Question

  1. 使用 enumerate 函數來打印每個水果的索引和值。
  2. 給定三個長度相同的列表,使用 zip 函數來創建一個包含這兩個列表中對應元素的元組的新列表。

Concept Question

  1. 解釋使用內建序列函式如 enumerate(), sorted(), zip(), 和 reversed() 如何提高代碼的可讀性和效率。

Conclusion

今天的教學就到這裡啦!希望大家透過這篇文章對內建序列函式有更深入的了解。如果你對文章中提到的操作或應用有任何問題,歡迎在留言區討論,或者分享你使用這些函式解決問題的經驗!也別忘了試試我提供的練習題目喔!祝大家練習順利,我們下次見啦~

Reference


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.