for循环可以遍历可迭代对象,得到的是每个元素的值,无法得到每个值所对应的索引下标,与内置的range
函数结合,可以得到元素值的同时,得到其索引下标。后面将说明使用内置的enumerate
函数才是解决这个问题的pythonic方法。
使用range函数遍历时得到索引
|
|
输出结果:
但是,上述代码有些生硬,我们必须获取列表长度,并且通过下标的方式访问每个元素,这种代码不便于理解。
使用enumerate函数遍历时得到索引
Python提供了内置enumerate
函数,以解决遍历时同时要得到对应元素的索引这个问题。
输出结果:
很明显,使用enumerate
函数遍历迭代器时同时得到每个元素的索引是更加pythonic的方式。
enumerate函数原理
enumerate函数本质是一个生成器函数,可以把各种迭代器(也包括序列及各种支持迭代的对象)包装为生成器,以便稍后产生输出值。生成器每次产生一对输出值,值为元组:
其中,前者表示循环下标,后者表示从迭代器中获取到的对应元素。示例:
enumerate函数指定第二个参数(初始值)
可以给enumerate函数指定第二个参数,以指定开始计数时所用到的值(默认是0)。
输出结果:
enumerate函数等价实现
enumerate函数等价于如下实现代码: