Python for 迴圈

for 迴圈用來遍歷(iterate)序列中的每個元素,對每個元素執行相同的操作。

基本語法

for 變數 in 序列:
    # 對每個元素執行的程式碼
fruits = ["apple", "banana", "orange"]

for fruit in fruits:
    print(fruit)

輸出:

apple
banana
orange

遍歷字串

for char in "Hello":
    print(char)

輸出:

H
e
l
l
o

range() 函數

range() 函數產生一個數字序列,常用於需要執行特定次數的迴圈:

range(stop)

從 0 開始,到 stop(不包含):

for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

range(start, stop)

從 start 開始,到 stop(不包含):

for i in range(2, 6):
    print(i)  # 2, 3, 4, 5

range(start, stop, step)

從 start 開始,到 stop(不包含),每次增加 step:

# 每次加 2
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

# 倒數(step 為負數)
for i in range(5, 0, -1):
    print(i)  # 5, 4, 3, 2, 1

遍歷 List 並取得索引

enumerate()

fruits = ["apple", "banana", "orange"]

for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

輸出:

0: apple
1: banana
2: orange

可以指定起始索引:

for index, fruit in enumerate(fruits, start=1):
    print(f"{index}: {fruit}")

輸出:

1: apple
2: banana
3: orange

遍歷 Dictionary

person = {"name": "Alice", "age": 25, "city": "Taipei"}

# 遍歷 keys
for key in person:
    print(key)

# 遍歷 values
for value in person.values():
    print(value)

# 遍歷 key-value pairs
for key, value in person.items():
    print(f"{key}: {value}")

同時遍歷多個序列

zip()

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

輸出:

Alice is 25 years old
Bob is 30 years old
Charlie is 35 years old

巢狀迴圈

for i in range(3):
    for j in range(3):
        print(f"({i}, {j})", end=" ")
    print()  # 換行

輸出:

(0, 0) (0, 1) (0, 2) 
(1, 0) (1, 1) (1, 2) 
(2, 0) (2, 1) (2, 2) 

九九乘法表

for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i}x{j}={i*j:2}", end=" ")
    print()

for...else

for 迴圈可以搭配 else,當迴圈正常結束(沒有被 break 中斷)時執行 else 區塊:

numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"Found even number: {num}")
        break
else:
    print("No even number found")  # 會執行這行
numbers = [1, 3, 4, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"Found even number: {num}")  # Found even number: 4
        break
else:
    print("No even number found")  # 不會執行

List Comprehension

用簡潔的方式建立 list:

# 傳統寫法
squares = []
for x in range(5):
    squares.append(x ** 2)

# List comprehension
squares = [x ** 2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

# 加上條件
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

# 巢狀
matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)  # [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

實際範例

計算總和

numbers = [1, 2, 3, 4, 5]
total = 0

for num in numbers:
    total += num

print(total)  # 15

# 當然也可以用 sum()
print(sum(numbers))  # 15

找出最大值

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
max_num = numbers[0]

for num in numbers:
    if num > max_num:
        max_num = num

print(max_num)  # 9

# 當然也可以用 max()
print(max(numbers))  # 9

過濾元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []

for num in numbers:
    if num % 2 == 0:
        evens.append(num)

print(evens)  # [2, 4, 6, 8, 10]

# 用 list comprehension
evens = [num for num in numbers if num % 2 == 0]
print(evens)  # [2, 4, 6, 8, 10]