2022-07-17 19:08:01
enumerate() 是 Python 中用于在遍历可迭代对象时同时获取元素索引和值的内置函数,能显著提升代码的可读性、安全性和通用性。
核心功能与优势同时获取索引和值
将可迭代对象转换为“枚举对象”,每次迭代返回 (索引, 值) 的元组。
示例:遍历水果列表并打印序号和名称。
fruits = ["apple", "banana", "cherry", "date"]for index, fruit in enumerate(fruits): print(f"Index {index}: {fruit}")输出:
Index 0: apple Index 1: banana Index 2: cherry Index 3: date代码可读性
直接通过 for index, item in enumerate(iterable) 结构明确意图,避免冗长的 range(len()) 写法。
对比传统方式:
for i in range(len(fruits)): print(f"Index {i}: {fruits[i]}") # 需手动索引,可读性差安全性与健壮性
直接作用于可迭代对象,无需依赖 len(),避免因对象为空或不支持 len()(如生成器)导致的错误。
例如:处理生成器时,range(len(generator)) 会报错,而 enumerate(generator) 正常工作。
通用性
支持所有可迭代对象,包括列表、元组、字符串、字典、集合、文件对象及生成器等。
字符串
遍历字符并获取位置:
word = "Python"for i, char in enumerate(word): print(f"Character at position {i}: {char}")元组
类似列表,有序序列:
my_tuple = ("apple", "banana", "orange")for i, fruit in enumerate(my_tuple): print(f"Fruit {i}: {fruit}")字典
默认迭代键,可通过 items() 同时获取键值对:
my_dict = {"name": "Alice", "age": 30}for i, key in enumerate(my_dict): print(f"Key {i}: {key} -> Value: {my_dict[key]}") # 或直接迭代键值对 for i, (key, value) in enumerate(my_dict.items()): print(f"Item {i}: {key}={value}")集合
无序结构,索引仅代表当前迭代顺序的序号:
my_set = {"red", "green", "blue"}for i, color in enumerate(my_set): print(f"Color {i}: {color}")文件对象
读取文件时获取行号:
with open("example.txt", "r") as f: for line_num, line in enumerate(f, start=1): print(f"Line {line_num}: {line.strip()}")生成器或自定义迭代器
任何实现迭代协议的对象均可使用,例如自定义生成器:
def my_generator(): yield "a" yield "b" yield "c" for i, value in enumerate(my_generator()): print(f"Value {i}: {value}")