2022-04-08 17:00:40
enumerate和zip是Python中用于简化迭代操作的内置函数,分别用于在迭代时获取元素索引和同时遍历多个可迭代对象。
enumerate函数:
功能:在迭代过程中同时获取元素的索引和值,避免手动维护计数器。
基本用法:
for index, value in enumerate(iterable): print(index, value)起始索引:可通过第二个参数指定起始索引(默认为0):
for index, value in enumerate(iterable, start=1): print(index, value)处理多元组:当迭代对象是多元组时,需注意解包方式:
data = [(1, 3), (2, 1), (3, 3)]for i, (x, y) in enumerate(data): print(i, x, y)zip函数:
功能:将多个可迭代对象“压缩”成一个迭代器,每次迭代返回一个元组,包含各输入对象的对应元素。
基本用法:
names = ['Alice', 'Bob', 'Charlie']ages = [25, 30, 35]for name, age in zip(names, ages): print(name, age)长度处理:默认以最短的输入对象为准截断,可用itertools.zip_longest处理不等长对象:
from itertools import zip_longestfor name, age in zip_longest(names, ages, fillvalue=None): print(name, age)多对象迭代:支持同时遍历多个可迭代对象:
hobbies = ['Reading', 'Hiking', 'Swimming']for name, age, hobby in zip(names, ages, hobbies): print(name, age, hobby)生成字典:快速将两个列表合并为字典:
name_age_dict = dict(zip(names, ages))共同特点:
惰性计算:两者均返回迭代器,直接打印会显示内存地址,需通过list()或循环消费。
底层实现:基于迭代器协议,提升代码简洁性和可读性。
应用场景:
enumerate:需要索引且追求代码简洁时(如遍历列表同时操作索引)。
zip:并行处理多个数据集(如合并用户信息)或快速构建字典。
示例代码:
# enumerate示例fruits = ['apple', 'banana', 'cherry']for idx, fruit in enumerate(fruits, 1): print(f"Index {idx}: {fruit}")# zip示例keys = ['a', 'b', 'c']values = [1, 2, 3]combined = dict(zip(keys, values))print(combined) # 输出: {'a': 1, 'b': 2, 'c': 3}注意事项:
通过合理使用这两个函数,可以显著提升代码的Python风格和可读性。