如何在使用循环遍历序列时访问索引for?
for
xs = [8, 23, 45] for x in xs: print("item #{} = {}".format(index, x))
期望的输出:
item #1 = 8 item #2 = 23 item #3 = 45
用内置函数enumerate():
enumerate()
for idx, x in enumerate(xs): print(idx, x)
通过手动索引或手动管理附加状态变量是非 Python的。for i in range(len(xs)): x = xs[i]
for i in range(len(xs)): x = xs[i]
查看PEP 279了解更多信息。
使用 for 循环,我如何访问循环索引,在这种情况下从 1 到 5?
用于enumerate在迭代时获取元素的索引:
enumerate
for index, item in enumerate(items): print(index, item)
请注意,Python 的索引从零开始,所以你会得到 0 到 4 上面。如果您想要计数,从 1 到 5,请执行以下操作:
count = 0 # in case items is empty and you need it after the loop for count, item in enumerate(items, start=1): print(count, item)
您要求的是以下 Pythonic 等价物,这是大多数低级语言程序员会使用的算法:
py index = 0 # Python's indexing starts at zero for item in items: # Python's for loops are a "for each" loop print(index, item) index += 1
或者在没有 for-each 循环的语言中:
py index = 0 while index < len(items): print(index, items[index]) index += 1
或者有时在 Python 中更常见(但不习惯):
py for index in range(len(items)): print(index, items[index])
Python 的enumerate函数通过隐藏对索引的说明来减少视觉上的混乱,并将可迭代对象封装到另一个可迭代对象(enumerate对象)中,该可迭代对象产生索引的两项元组和原始迭代将提供的项。看起来像这样:
for index, item in enumerate(items, start=0): # default is zero print(index, item)
这个代码示例很好地说明了 Python 惯用代码和非 Python 代码之间的区别。惯用代码是复杂(但不复杂)的 Python,以预期使用的方式编写。语言的设计者期望使用惯用代码,这意味着通常这些代码不仅更具可读性,而且更高效。
即使您不需要索引,但您需要计算可以开始的迭代次数(有时是可取的)1,最终数字将是您的计数。
1
count = 0 # in case items is empty for count, item in enumerate(items, start=1): # default is zero print(item) print('there were {0} items printed'.format(count))
当你说你想要从 1 到 5 时,计数似乎更多的是你打算要求的(而不是索引)。
为了分解这些示例,假设我们有一个要使用索引迭代的项目列表:
items = ['a', 'b', 'c', 'd', 'e']
现在我们将这个迭代传递给枚举,创建一个枚举对象:
enumerate_object = enumerate(items) # the enumerate object
我们可以从这个迭代中拉出第一项,我们将使用该next函数进入循环:
next
iteration = next(enumerate_object) # first iteration from enumerate print(iteration)
我们看到我们得到了一个元组0,第一个索引和'a'第一个项目:
0
'a'
(0, 'a')
我们可以使用所谓的“序列解包”来从这个二元组中提取元素:
index, item = iteration # 0, 'a' = (0, 'a') # essentially this.
当我们检查时index,我们发现它指的是第一个索引,0,并且item指的是第一个项目,'a'。
index
item
>>> print(index) 0 >>> print(item) a
所以这样做:
for index, item in enumerate(items, start=0): # Python indexes start at zero print(index, item)