enumerate(iterable, start=0) -> iterator
取代 for i in range(len(seq)): val = seq[i],直接同時取得索引與值,程式碼更簡潔、可讀、效能更好。
fruits = ['apple', 'banana', 'cherry']
for idx, fruit in enumerate(fruits):
print(f"{idx}: {fruit}")
# 0: apple
# 1: banana
# 2: cherry
# 自訂起始索引
for idx, fruit in enumerate(fruits, start=1):
print(f"{idx}. {fruit}")
# 1. apple
# 2. banana
# 3. cherry
# 1. 列表推導式建立索引字典
index_map = {v: i for i, v in enumerate(fruits)}
# {'apple': 0, 'banana': 1, 'cherry': 2}
# 2. 同時迭代多個序列(配合 zip)
names = ['Alice', 'Bob', 'Carol']
scores = [85, 92, 78]
for i, (name, score) in enumerate(zip(names, scores), 1):
print(f"#{i} {name}: {score}")
# 3. 字串枚舉
for i, ch in enumerate("Python"):
print(i, ch)
# 4. 檔案行號(記憶體效率佳)
with open('large.log') as f:
for line_no, line in enumerate(f, 1):
if 'ERROR' in line:
print(f"Line {line_no}: {line.strip()}")
# enumerate 實作概念
def enumerate(iterable, start=0):
i = start
it = iter(iterable)
while True:
try:
yield (i, next(it))
i += 1
except StopIteration:
break
for item in enumerate(seq): → item 是 tuple,需 for idx, val in enumerate(seq):enumerate 回傳迭代器,惰性產生,記憶體友善