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]