《從零開始的Python筆記》Day#7:迭代器與生成器

更新於 發佈於 閱讀時間約 7 分鐘
raw-image

這篇筆記主要是介紹資料科學家的好朋友:迭代器和生成器!

迭代器與生成器是大家在處理資料以及訓練模型時常常會使用到的工具,請務必熟悉他們的用法!!!

🔄 迭代器

可迭帶物件與iter()next()

  • 可迭代物件是可以逐一取出其元素的物件,例如列表(List)、元組(Tuple)、字典(Dictionary)、字串(Sting)等。
  • 檢查是否可迭代:可以使用 iter() 函數將可迭代物件轉為迭代器。

迭代器 (Iterator)

  • 迭代器是支持 next() 方法的物件,可以逐步返回序列的下一個元素,耗盡後會引發 StopIteration 例外。
  • 特性:
    • 迭代器是一種一次性資源(元素只能被取出一次)。
    • 可通過 next() 逐步獲取值。

基礎迭代器

# 建立一個可迭代物件(如列表)
numbers = [1, 2, 3]

# 將可迭代物件轉換成迭代器
iterator = iter(numbers)

# 使用 next() 逐一獲取元素
print(next(iterator)) # 1
print(next(iterator)) # 2
print(next(iterator)) # 3

# 當迭代耗盡時,會引發 StopIteration
try:
print(next(iterator))
except StopIteration:
print("No more elements!")

# 輸出
1
2
3
No more elements!

檢查物件是否為迭代器

from collections.abc import Iterator

# 檢查是否為迭代器
numbers = [1, 2, 3]
iterator = iter(numbers)

print(isinstance(numbers, Iterator)) # False (列表不是迭代器)
print(isinstance(iterator, Iterator)) # True (經 iter() 轉換後是迭代器)

自定義迭代器類別

class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0

def __iter__(self):
return self

def __next__(self):
if self.index < len(self.data):
value = self.data[self.index]
self.index += 1
return value
else:
raise StopIteration

numbers = MyIterator([1, 2, 3])
for num in numbers:
print(num)

# 輸出
1
2
3

📔 生成器 (Generator)

  • 生成器是特殊的函數,能夠暫停執行並返回值,稍後可從暫停處繼續執行。
  • 透過 yield 產生值: 使用 yield 關鍵字替代 return,生成器會記住停留的位置。
def count_up_to(maximum):
count = 1
while count <= maximum:
yield count # 暫停並返回 count
count += 1

# 使用生成器
counter = count_up_to(3)
print(next(counter)) # 1
print(next(counter)) # 2
print(next(counter)) # 3

# 當生成器耗盡時,會引發 StopIteration
try:
print(next(counter))
except StopIteration:
print("Generator is exhausted!")

# 輸出
1
2
3
Generator is exhausted!

生成器表達式

生成器表達式是生成器的一種簡化語法,使用括號 () 定義,類似串列生成式的用法。

# 使用生成器表達式創建生成器
numbers = (x*x for x in range(5))

# 使用迭代器獲取生成結果
print(next(numbers)) # 0
print(next(numbers)) # 1
print(next(numbers)) # 4

🎰 迭代器 vs 生成器

在資料科學的領域中,我們常常需要處理大量的資料,不論是結構型資料(Excel形式的表格資料)或是非結構型資料(圖片、文字、語音等),這些資料在存取和運算的過程中都會占用非常多的記憶體容量(RAM)。藉由善用迭代器和生成器可以讓我們以更有效率的方式來處理這些資料,也能避免記憶體被塞滿或是不足的問題。

初學者很難搞懂究竟什麼時候用迭代器,什麼時候用生成器,初學階段可以先不管,只要知道在處理資料可以使用這兩種方法進行資料的讀取,盡量避免將全部資料一次性讀取的作法,尤其是在非結構性資料的任務上。

💡因此迭代器和生成器是大家在資料科學這條路上不可或缺的技術之一。

raw-image

迭代器適合情境:

  • 已有集合或順序數據結構的逐步遍歷。
  • 需要自定義細節更精確的邏輯(例如,特定條件下停止迭代)。

生成器適合情境:

  • 動態生成數據(如大數據流或無限序列),節省內存。
  • 簡化代碼邏輯,計算延遲執行。

💡迭代器更加底層,適合自定義對象的迭代邏輯;生成器更高效簡潔,適合動態生成數據的應用。

留言
avatar-img
留言分享你的想法!
avatar-img
Ethan的AI學習筆記
3會員
25內容數
我是一個不務正業的資料科學家,從零開始學習的路途上跌跌撞撞,跌過許多坑,也撞過許多牆... 當有人迷失方向時,希望這些筆記可以成為你的指南針。
Ethan的AI學習筆記的其他內容
2025/08/16
大部分在學習程式語言的人很常會看到或是聽到一個很抽象的詞:物件導向 對於初學者來說,又出現了一個很難以理解的名詞,而且在學習上的確也是很常讓人碰壁的一部分。雖然有著不小的學習障礙,但是對於提升程式設計能力有很大的幫助,因此建議大家可以多點耐心去接觸並且練習如何使用它。
Thumbnail
2025/08/16
大部分在學習程式語言的人很常會看到或是聽到一個很抽象的詞:物件導向 對於初學者來說,又出現了一個很難以理解的名詞,而且在學習上的確也是很常讓人碰壁的一部分。雖然有著不小的學習障礙,但是對於提升程式設計能力有很大的幫助,因此建議大家可以多點耐心去接觸並且練習如何使用它。
Thumbnail
2025/08/14
學習到這個階段,大家如果都有跟上的話已經可以試著自行開發一些工具或是演算法了。不過Python還有提供許多進階的功能可以幫助我們在開發的過程中更順暢、更有效率。 ⚠️ 例外處理 (Exception)
Thumbnail
2025/08/14
學習到這個階段,大家如果都有跟上的話已經可以試著自行開發一些工具或是演算法了。不過Python還有提供許多進階的功能可以幫助我們在開發的過程中更順暢、更有效率。 ⚠️ 例外處理 (Exception)
Thumbnail
2025/08/13
學完Python的基礎課程後,大家對於Python已經有了一定程度的了解,可以開始踏入Python進階的課程了! 這邊將介紹 Python 中的函數、模組與套件,這些技巧可以提升結構化、模組化程式的能力,讓程式碼更易於維護、重用與共享。
Thumbnail
2025/08/13
學完Python的基礎課程後,大家對於Python已經有了一定程度的了解,可以開始踏入Python進階的課程了! 這邊將介紹 Python 中的函數、模組與套件,這些技巧可以提升結構化、模組化程式的能力,讓程式碼更易於維護、重用與共享。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News