问题: 类似下面的Python For 循环,
xs = [8, 23, 45]
for x in xs:
print("item #{} = {}".format(index, x))
Code language: PHP (php)
如何输出:
item #1 = 8
item #2 = 23
item #3 = 45
Code language: PHP (php)
用enumerate在遍历时获取元素的索引:
for index, item in enumerate(items):
print(index, item)
Code language: PHP (php)
请注意,Python 的索引从零开始,因此输出为 0 到 4
Python 的enumerate函数通过隐藏对索引的说明,并将可遍历对象封装到另一个可遍历对象(enumerate对象)中,从而使代码更易懂:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Code language: PHP (php)
详解
为了分解这些示例,假设我们有一个要使用索引遍历的列表:
items = ['a', 'b', 'c', 'd', 'e']
Code language: JavaScript (javascript)
现在我们将这个遍历传递给enumerate,创建一个enumerate对象:
enumerate_object = enumerate(items) # the enumerate object
Code language: PHP (php)
然后从这个遍历中拉出第一项,使用next函数进入循环:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Code language: PHP (php)
我们看到我们得到了一个元组,索引为0, 元素为’a’
(0, 'a')
Code language: JavaScript (javascript)
我们可以使用所谓的“序列解包(sequence unpacking)”来从这个二元组中提取元素:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
Code language: PHP (php)
当检查index时,我们发现它指的是第一个索引0,并且item指的是第一个元素’a’。
>>> print(index)
0
>>> print(item)
a
Code language: PHP (php)
结论
- Python 索引从零开始
- 要在遍历时从可遍历对象中获取这些索引,请使用 enumerate 函数
- 以惯用的方式使用 enumerate(以及元组解包)创建的代码更具可读性和可维护性:
所以这样做:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)
Code language: PHP (php)