Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
enumerate():加上索引的迭代
語法:
enumerate(iterable, start=0)enumerate() 會把一個可迭代物件包裝成「(索引, 元素)」的配對,讓你在迴圈中同時拿到索引和值。fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple
# 1 banana
# 2 cherry指定起始索引
預設索引從 0 開始,但可以用 start 參數改變起始值。
fruits = ['apple', 'banana', 'cherry']
# 從 1 開始編號
for i, fruit in enumerate(fruits, start=1):
print(f'{i}. {fruit}')
# 1. apple
# 2. banana
# 3. cherry為什麼不用 range(len())?
很多初學者會用 range(len(list)) 來取得索引,但 enumerate() 更 Pythonic,也更簡潔易讀。
colors = ['red', 'green', 'blue']
# 不推薦:用 range(len())
for i in range(len(colors)):
print(i, colors[i])
# 推薦:用 enumerate()
for i, color in enumerate(colors):
print(i, color)
# 兩者輸出相同,但 enumerate 更簡潔enumerate 的回傳值
enumerate() 回傳的是一個 enumerate 物件(迭代器),每次產生一個 tuple。可以轉成 list 查看。
fruits = ['apple', 'banana', 'cherry']
result = enumerate(fruits)
print(type(result)) # <class 'enumerate'>
print(list(result)) # [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
# 搭配 dict() 建立索引字典
index_map = dict(enumerate(fruits))
print(index_map) # {0: 'apple', 1: 'banana', 2: 'cherry'}搭配各種可迭代物件
enumerate() 可以搭配字串、tuple、集合等各種可迭代物件使用。
# 字串
for i, ch in enumerate('Hello'):
print(i, ch)
# 0 H
# 1 e
# 2 l
# 3 l
# 4 o
# tuple
for i, val in enumerate((10, 20, 30)):
print(i, val)
# 搭配列表推導式
indexed = [(i, x) for i, x in enumerate(['a', 'b', 'c'])]
print(indexed) # [(0, 'a'), (1, 'b'), (2, 'c')]小小綜合例子
# 學生答案批改系統
answers = ['A', 'B', 'C', 'A', 'D']
correct = ['A', 'C', 'C', 'A', 'B']
print('=== 答案批改 ===')
score = 0
for i, (student, ans) in enumerate(zip(answers, correct), start=1):
status = '✓' if student == ans else '✗'
if student == ans:
score += 1
print(f'第{i}題:你答 {student},正確答案 {ans} → {status}')
print(f'\n總分:{score}/{len(correct)}')
print(f'正確率:{score/len(correct)*100:.0f}%')
# === 答案批改 ===
# 第1題:你答 A,正確答案 A → ✓
# 第2題:你答 B,正確答案 C → ✗
# 第3題:你答 C,正確答案 C → ✓
# 第4題:你答 A,正確答案 A → ✓
# 第5題:你答 D,正確答案 B → ✗
#
# 總分:3/5
# 正確率:60%









