1. 前言
什麼是 Python 的 for in
語法?
Python 的 for in
語法是一種用來處理可疊代資料(如列表、字典、字串等)進行重複操作的語法。
在程式設計中,經常會需要依序處理清單中的元素或進行重複運算。透過 for in
語法,可以撰寫出簡潔且易讀的程式碼。
例如,以下是一個依序取得清單中每個元素並執行處理的基本迴圈寫法:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
輸出結果
apple
banana
cherry
如上所示,使用 for in
語法可以逐一取出清單中的元素並執行迴圈處理。
本文的目標讀者
本文適合以下讀者閱讀:
- Python 新手,想要學習
for in
語法的基本用法 - 希望利用
for in
有效率地操作列表、字典、集合等資料結構的人 - 想學習
enumerate()
、zip()
、列表生成式等進階技巧的人
本文可以學到什麼?
閱讀本文後,您將能理解並實作以下內容:
for in
語法的基本結構與運作原理- 如何在列表、字典、集合、元組中使用
for in
語法 - 如何使用
break
和continue
來控制迴圈 enumerate()
、zip()
的用法與應用場景for-else
語法的概念與實例- 如何使用列表生成式撰寫高效率程式碼
我們將透過具體的程式碼範例來說明 Python 中的迴圈處理方式,幫助您深入理解並應用於實務中。
2. Python 的 for in
語法基礎
什麼是 for in
語法?
for in
語法是 Python 中最常見的迴圈寫法之一。
它可以從列表、字典、元組、字串等資料型別中,依序取出元素並重複執行處理。
基本語法
for 變數 in 可疊代物件:
處理
變數
:用來儲存每次迴圈中取出的元素可疊代物件
:像是列表、字典、元組、集合、字串等可以重複取出元素的物件處理
:每次迴圈要執行的程式碼
基本範例
要依序處理列表中的元素,可以寫成以下方式:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
輸出結果
apple
banana
cherry
在這個例子中,fruits
列表的每個元素會依序被指定給 fruit
變數,然後執行列印的處理。
in
運算子的用途
Python 中的 in
運算子可用來檢查某個元素是否存在於列表、字典、字串等資料中。
搭配 for
迴圈使用時,可以逐一取出資料的每個元素來處理。
在列表中使用 in
運算子
numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
print("3 存在於列表中")
輸出結果
3 存在於列表中
在字典中使用 in
運算子
在字典(dict
類型)中,in
預設會檢查「鍵(key)」是否存在:
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
if "age" in person:
print("存在 age 這個鍵")
輸出結果
存在 age 這個鍵
如果要檢查值(value)是否存在,可以使用 .values()
方法:
if 25 in person.values():
print("存在值為 25 的資料")
輸出結果
存在值為 25 的資料
使用 not in
來表示不存在的情況
若要檢查某個元素是否不存在,可以使用 not in
:
if "email" not in person:
print("email 鍵不存在")
輸出結果
email 鍵不存在
使用 for in
語法的好處
使用 for in
語法有以下幾個優點:
✅ 可讀性高
在處理列表或字典等資料時,程式碼簡潔易懂。
✅ 不容易發生索引錯誤
不像傳統的 for
迴圈需要自己管理計數器,也較不會超出陣列範圍。
✅ 能輕鬆處理可疊代資料
像是列表、字典、元組、集合、字串等都能直接使用。
小結
本節介紹了 Python 中 for in
語法的基本概念。
重點整理如下:
for in
是用來處理列表、字典等可疊代資料的迴圈語法- 使用
in
運算子可以檢查元素是否存在於某個資料中 - 使用
not in
可以判斷元素是否不存在 - 使用
for in
可以撰寫簡單又可讀性高的程式碼
3. for in
語法的基本用法
Python 的 for in
語法是一個非常實用的工具,適用於反覆處理列表、字典、元組、集合等資料結構。
本章將詳細說明 for in
的基本用法,並搭配各種資料型別提供具體的程式碼範例。
使用 for in
處理列表(List)
列表(list
類型)是 Python 中最常用的資料結構之一。
透過 for in
語法,可以依序取得列表中的每個元素並進行處理。
基本的列表迴圈處理
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
輸出結果
apple
banana
cherry
取得列表索引的方法(enumerate()
)
一般的 for in
只能取得元素本身,若要同時取得元素的索引(位置),可以使用 enumerate()
函數,非常方便。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
輸出結果
0: apple
1: banana
2: cherry
使用 for in
處理字典(Dictionary)
字典(dict
類型)是一種儲存「鍵與值」配對的資料結構。
使用 for in
可以逐一取出鍵與對應的值來處理。
只取得字典的鍵(key)
當使用 for in
遍歷字典時,預設會取得所有的鍵(key):
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
for key in person:
print(key)
輸出結果
name
age
city
同時取得鍵與值(使用 items()
)
如果想要同時取得鍵(key)和值(value),可以使用 .items()
方法:
for key, value in person.items():
print(f"{key}: {value}")
輸出結果
name: Alice
age: 25
city: Tokyo
使用 for in
處理元組(Tuple)與集合(Set)
Python 的 for in
語法也適用於元組(tuple
類型)與集合(set
類型)。
處理元組
元組與列表類似,但它是一種不可修改(immutable)的資料結構。
可以使用與列表相同的方式來進行迴圈處理:
colors = ("red", "green", "blue")
for color in colors:
print(color)
輸出結果
red
green
blue
處理集合
集合(set
類型)是一種不允許重複值的資料結構。
注意:集合中的元素沒有固定順序,因此輸出順序可能會不同。
unique_numbers = {1, 2, 3, 4, 5}
for num in unique_numbers:
print(num)
輸出結果(順序不固定)
1
3
2
5
4
使用 for in
處理字串(String)
Python 的字串(str
類型)也可以用 for in
一個字一個字地處理:
word = "Python"
for char in word:
print(char)
輸出結果
P
y
t
h
o
n
巢狀 for
迴圈(嵌套迴圈)
你也可以在一個 for
迴圈中再寫一個 for
迴圈,這種結構稱為巢狀迴圈(nested loop)。
例如,當你要處理一個二維列表(矩陣)時,可以這樣寫:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
for num in row:
print(num, end=" ")
print() # 換行
輸出結果
1 2 3
4 5 6
7 8 9
小結
本章介紹了如何使用 for in
語法處理列表、字典、元組、集合和字串等資料結構。
重點整理:
- 處理列表 時可以搭配
enumerate()
取得索引 - 處理字典 時使用
.items()
可同時取得鍵與值 - 元組與集合 也可用
for in
遍歷(但集合順序不固定) - 處理字串 時可逐字取得每個字元
- 巢狀
for
迴圈 可用於處理多維資料(如二維列表)
4. for in
的進階應用技巧
除了基本的 for in
用法之外,Python 還提供了許多搭配 for in
使用的實用技巧。
本章將介紹如何使用 range()
、zip()
、enumerate()
等方法來進行更靈活的迴圈處理。
使用 range()
進行數值迴圈
使用 range()
函數可以根據指定的範圍進行數值型迴圈。range()
是一種記憶體效率高的可疊代物件,可以像列表一樣使用。
基本用法
for i in range(5):
print(i)
輸出結果
0
1
2
3
4
預設情況下,range(n)
會產生從 0 到 n-1 的整數。
指定起始值、結束值與步進值
可以使用 range(start, stop, step)
的形式來自訂起始與結束範圍以及每次增加的數值:
for i in range(1, 10, 2):
print(i)
輸出結果
1
3
5
7
9
使用 range()
實現倒序迴圈
只要指定負的步進值,就可以從大到小進行倒序迴圈:
for i in range(10, 0, -2):
print(i)
輸出結果
10
8
6
4
2
使用 zip()
同時遍歷多個列表
當需要同時對多個列表進行迴圈時,zip()
函數非常方便。
基本用法
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 的年齡是 {age} 歲")
輸出結果
Alice 的年齡是 25 歲
Bob 的年齡是 30 歲
Charlie 的年齡是 35 歲
當列表長度不一致時
若列表長度不同,zip()
會以最短的列表為基準結束迴圈:
names = ["Alice", "Bob"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 的年齡是 {age} 歲")
輸出結果
Alice 的年齡是 25 歲
Bob 的年齡是 30 歲
使用 enumerate()
同時取得索引值
當需要在迴圈中同時取得每個元素與它的索引位置時,使用 enumerate()
會非常方便。
基本用法
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
輸出結果
0: apple
1: banana
2: cherry
指定起始索引
你也可以透過 enumerate()
的第二個參數來指定起始編號:
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
輸出結果
1: apple
2: banana
3: cherry
巢狀 for
迴圈的進階應用
透過巢狀(嵌套)for
迴圈,可以實作多層次的資料處理。
這在處理如矩陣等二維資料時非常實用:
使用巢狀迴圈處理二維列表
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for num in row:
print(num, end=" ")
print() # 換行
輸出結果
1 2 3
4 5 6
7 8 9
使用 sorted()
排序列表後進行迴圈
若希望在排序後處理列表,可以搭配 sorted()
函數使用:
numbers = [5, 3, 8, 1, 2]
for num in sorted(numbers):
print(num)
輸出結果
1
2
3
5
8
倒序排序(降冪)
for num in sorted(numbers, reverse=True):
print(num)
輸出結果
8
5
3
2
1
小結
本章介紹了多種 for in
搭配常用函數的實用技巧:
重點整理:
range()
:可用於數值範圍的迴圈處理range(start, stop, step)
可自訂起始、結束與步進值zip()
:可同時處理多個列表的元素- 注意:會以最短列表為準進行迴圈
enumerate()
:可同時取得索引與元素enumerate(列表, start=起始值)
可指定索引起始值- 巢狀
for
:可處理多維資料如矩陣 sorted()
:可排序後再迴圈處理
熟練這些技巧後,您將能更靈活地處理各種資料,寫出更高效又易讀的 Python 程式碼。
5. for
迴圈的控制方式
在 Python 中的 for in
迴圈中,可以使用 break
和 continue
等控制語句 來更加靈活地控制迴圈的流程。
本章將詳細說明這些控制方法的用途與使用方式。
break
與 continue
的差異
break
和 continue
是用來中斷或跳過某次迴圈處理的控制語句。
控制語句 | 說明 |
---|---|
break | 立刻結束整個迴圈 |
continue | 跳過當次處理,繼續下一輪迴圈 |
使用 break
中斷迴圈
當符合某個條件時,可以使用 break
強制結束整個迴圈:
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 3:
print("找到 3,結束迴圈")
break
print(num)
輸出結果
1
2
找到 3,結束迴圈
使用 continue
跳過特定處理
使用 continue
可以略過當次的處理流程,直接跳到下一輪迴圈:
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 3:
print("跳過 3")
continue
print(num)
輸出結果
1
2
跳過 3
4
5
活用 for-else
語法
Python 的 for
迴圈還可以搭配 else
區塊,在迴圈完整執行完畢(未被 break 中斷)時才執行 else 的內容。
for-else
的基本使用方式
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 6:
print("找到 6!")
break
else:
print("6 不在列表中")
輸出結果
6 不在列表中
這段程式中,因為列表中沒有 6
,所以 for
迴圈正常結束,接著執行 else
區塊的內容。
使用 pass
來「什麼都不做」
pass
是一種語法上需要寫內容但實際上什麼都不做的保留字。
for num in range(1, 6):
if num == 3:
pass # 這裡什麼都不做
else:
print(num)
輸出結果
1
2
4
5
在這段程式中,當 num == 3
時,會執行 pass
,也就是不做任何事情,然後繼續下一輪迴圈。
小結
本章介紹了如何使用 Python 的控制語句來精細調整 for in
迴圈的行為。
重點整理:
- 使用
break
可以提前結束整個迴圈 - 使用
continue
可以跳過當次處理,繼續下一輪 for-else
會在迴圈未被 break 中斷時執行else
區塊pass
可用於需要語法但實際上不執行任何操作的情境
活用這些控制語句,可以讓您的迴圈更具彈性與可讀性。
6. 列表生成式(List Comprehension)
在 Python 中,使用 for
迴圈產生新列表時,可以透過列表生成式(List Comprehension) 來更簡潔地撰寫。
這種寫法不僅提升程式的可讀性,通常在執行效能上也更佳,因此是 Python 中常見又實用的技巧之一。
什麼是列表生成式?
列表生成式是一種可以快速建立新列表的語法。
相較於傳統使用 for
迴圈的方式,列表生成式可以讓程式碼更簡短、更清晰。
基本語法
[運算式 for 變數 in 可疊代物件]
運算式
:對每個元素進行的操作(如轉換、計算等)變數
:從可疊代物件中取出的元素可疊代物件
:如列表、字典、集合、字串等可被重複處理的資料
使用傳統 for
迴圈建立列表
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
squared_numbers.append(num ** 2)
print(squared_numbers)
輸出結果
[1, 4, 9, 16, 25]
使用列表生成式的寫法
numbers = [1, 2, 3, 4, 5]
squared_numbers = [num ** 2 for num in numbers]
print(squared_numbers)
輸出結果
[1, 4, 9, 16, 25]
帶條件的列表生成式
可以在列表生成式中加入 if
條件,僅處理符合條件的元素。
篩選偶數
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)
輸出結果
[2, 4, 6]
將奇數乘以 2 後加入列表
numbers = [1, 2, 3, 4, 5, 6]
double_odd_numbers = [num * 2 for num in numbers if num % 2 == 1]
print(double_odd_numbers)
輸出結果
[2, 6, 10]
使用 if-else
條件語句的列表生成式
也可以在列表生成式中加入 if-else
,根據條件套用不同的處理方式:
奇數乘 2,偶數保持不變
numbers = [1, 2, 3, 4, 5, 6]
modified_numbers = [num * 2 if num % 2 == 1 else num for num in numbers]
print(modified_numbers)
輸出結果
[2, 2, 6, 4, 10, 6]
巢狀(嵌套)列表生成式
列表生成式也可以寫成巢狀結構,適合處理二維資料或需要雙層迴圈的情境。
使用雙層列表生成式展開二維列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
輸出結果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
字典生成式(Dictionary Comprehension)
就像列表一樣,Python 也可以使用字典生成式 來快速產生字典:
從列表產生平方值字典
numbers = [1, 2, 3, 4, 5]
squared_dict = {num: num ** 2 for num in numbers}
print(squared_dict)
輸出結果
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
小結
本章說明了列表生成式的基本用法與進階應用。
重點整理:
- 列表生成式可用簡潔的語法快速建立新列表
- 可搭配
if
條件篩選元素 - 可搭配
if-else
針對不同情況進行處理 - 支援巢狀迴圈,適合處理二維資料
- 字典也可使用相似語法進行生成
7. 常見問題(FAQ)
雖然 Python 的 for in
語法簡潔又強大,但對初學者來說,還是有不少容易卡關的地方。
本章整理了一些關於 for in
的常見問題與解決方式。
for in
跟 while
有什麼差別?
Python 中的兩種主要迴圈語法為 for in
與 while
。
迴圈類型 | 特色 |
---|---|
for in | 重複固定次數 的處理 |
while | 直到條件不成立為止 持續執行 |
for in
的範例(固定次數)
for i in range(5):
print(i)
輸出結果
0
1
2
3
4
✅ 當重複次數已知時,適合使用 for in
迴圈
while
的範例(依條件執行)
count = 0
while count < 5:
print(count)
count += 1
輸出結果
0
1
2
3
4
✅ 當重複次數不確定、需依條件控制時,使用 while
更適合
in
運算子可以用在哪些資料型別?
Python 的 in
運算子可用於下列可疊代資料型別:
資料型別 | 可搭配 for in 使用 |
---|---|
列表(list) | ✅ 可以 |
元組(tuple) | ✅ 可以 |
字典(dict) | ✅ 可以(預設針對鍵 key) |
集合(set) | ✅ 可以 |
字串(str) | ✅ 可以 |
break
跟 continue
有什麼不同?
控制語句 | 用途 |
---|---|
break | 完全結束 迴圈 |
continue | 跳過 當次處理,直接進入下一輪 |
for-else
是什麼?何時使用?
for-else
是 Python 特有語法,當 for
迴圈未被 break
中斷時,會執行 else
區塊。
範例:
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 6:
print("找到 6!")
break
else:
print("6 不在列表中")
輸出結果
6 不在列表中
✅ 適合用於搜尋特定元素並在未找到時執行特別處理
如何在 for in
迴圈中使用計數器?
若需手動取得索引,可以使用 enumerate()
函數:
enumerate()
的用法
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
✅ 使用 enumerate()
可自動取得索引,無需另外維護變數
for in
無法執行時可能原因?
✅ 常見錯誤與解法:
- 對非可疊代物件使用迴圈
錯誤例子:num = 10 for n in num: # TypeError print(n)
解法: 使用
range()
:for n in range(num): print(n)
- 列表為空
items = [] for item in items: print(item) # 不會有輸出
解法: 在迴圈前先確認列表是否為空。
小結
本章介紹了 for in
迴圈中常見的疑問與錯誤處理方式。
✅ 重點整理
for
適合已知次數的迴圈,while
適合依條件反覆執行break
可提前結束,continue
可跳過當次處理for-else
可在未找到目標時補充處理enumerate()
可簡潔地取得索引與值
8. 總結
本篇文章全面介紹了 Python 中的 for in
語法,從基礎到進階應用皆有涵蓋。
在這一節,我們將回顧所有內容並整理出重點。
for in
的基礎知識
for in
是用來處理列表、字典、元組、集合、字串等可疊代資料的迴圈語法- 基本語法
for 變數 in 可疊代物件: 處理
- 列表迴圈的範例
fruits = ["apple", "banana", "cherry"]for fruit in fruits:
print(fruit)
for in
的進階技巧
✅ 使用 range()
控制數值迴圈
for i in range(5):
print(i) # 0, 1, 2, 3, 4
✅ 使用 zip()
同時遍歷多個列表
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 的年齡是 {age} 歲")
✅ 使用 enumerate()
取得索引與值
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
✅ 對列表排序後再進行迴圈
numbers = [5, 3, 8, 1, 2]
for num in sorted(numbers):
print(num)
迴圈控制技巧
✅ 使用 break
中途結束迴圈
for num in range(1, 6):
if num == 3:
break
print(num)
✅ 使用 continue
跳過特定次數
for num in range(1, 6):
if num == 3:
continue
print(num)
✅ 活用 for-else
結構
for num in range(1, 6):
if num == 7:
break
else:
print("找不到 7")
使用列表生成式進行迴圈處理
✅ 傳統方式建立平方值列表
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
squared_numbers.append(num ** 2)
✅ 使用列表生成式簡化語法
squared_numbers = [num ** 2 for num in numbers]
✅ 條件式列表生成
even_numbers = [num for num in numbers if num % 2 == 0]
✅ 字典生成式
squared_dict = {num: num ** 2 for num in numbers}
for in
常見錯誤與對策
✅ 無法直接對整數使用 for in
num = 10
for i in num: # 錯誤
print(i)
➡ 解法
for i in range(num):
print(i)
✅ 在字典中 in
預設是檢查鍵(key)
person = {"name": "Alice", "age": 25}
if "Alice" in person: # 錯誤,因為只檢查鍵
print("存在")
➡ 解法:若要檢查值,請使用 .values()
if "Alice" in person.values():
print("存在")
進一步學習資源
想更深入學習 Python 的 for in
語法,可以參考以下資源:
- Python 官方文件
https://docs.python.org/3/tutorial/controlflow.html - 線上 Python 練習平台
- LeetCode(Python 題庫)
- AtCoder(競技程式挑戰)
結語與後續學習方向
本篇文章涵蓋了 for in
的基礎用法、進階技巧、控制方式、列表生成式,以及常見問題的解答。
✅ 掌握 for in
,就能更有效地處理資料與控制流程!
✅ 活用列表生成式、zip()
、enumerate()
等技巧可提升寫程式的效率與可讀性!
✅ 熟練 break
、continue
、for-else
等控制語句可避免錯誤並增加靈活性!
接下來的進階學習可以考慮了解 while
迴圈、遞迴函數、產生器(yield
) 等更深入的 Python 控制結構。
持續善用迴圈技巧,讓你的 Python 程式碼更簡潔、更高效!