Python 的 for in 語法完全指南|從基本語法到進階應用與列表推導式的全方位解析

目次

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 語法
  • 如何使用 breakcontinue 來控制迴圈
  • 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 迴圈中,可以使用 breakcontinue 等控制語句 來更加靈活地控制迴圈的流程。
本章將詳細說明這些控制方法的用途與使用方式。

breakcontinue 的差異

breakcontinue 是用來中斷跳過某次迴圈處理的控制語句。

控制語句說明
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 inwhile 有什麼差別?

Python 中的兩種主要迴圈語法為 for inwhile

迴圈類型特色
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)✅ 可以

breakcontinue 有什麼不同?

控制語句用途
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 無法執行時可能原因?

常見錯誤與解法:

  1. 對非可疊代物件使用迴圈
    錯誤例子:

    num = 10
    for n in num:  # TypeError
        print(n)

    解法: 使用 range()

    for n in range(num):
        print(n)
  2. 列表為空
    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 語法,可以參考以下資源:

結語與後續學習方向

本篇文章涵蓋了 for in 的基礎用法、進階技巧、控制方式、列表生成式,以及常見問題的解答。

掌握 for in,就能更有效地處理資料與控制流程!
活用列表生成式、zip()enumerate() 等技巧可提升寫程式的效率與可讀性!
熟練 breakcontinuefor-else 等控制語句可避免錯誤並增加靈活性!

接下來的進階學習可以考慮了解 while 迴圈、遞迴函數、產生器(yield 等更深入的 Python 控制結構。

持續善用迴圈技巧,讓你的 Python 程式碼更簡潔、更高效!