loops - 在'for'循环中,python 访问索引?

  显示原文与译文双语对照的内容
73 1

如何访问索引本身,如下面的列表?

ints = [8, 23, 45, 12, 78]

当我使用 for 循环循环时,如何从 1到 5访问循环索引?

时间:原作者:0个回答

100 4

使用其他状态变量( 如索引变量( 你通常在诸如C 或PHP这样的语言中使用) ) 被认为是非python化的。

更好的选择是使用内置函数 enumerate(),在 python 2和 3中都可用:

for idx, val in enumerate(ints):
 print(idx, val)

请查看 PEP 279,了解更多信息。

原作者:
129 5
如何使用for循环,在本例中,我如何访问循环索引( 从 1到 5 )?

在迭代时使用 enumerate 获取带有元素的索引:

for index, item in enumerate(items):
 print(index, item)

并注意 python 的索引从零开始,因此你可以使用上述方法获得 0到 4如果要计数 1到 5,请执行以下操作:

for count, item in enumerate(items, start=1):
 print(count, item)
不确定控制流

你要求的是 Pythonic, 等效于以下内容这是大多数低级语言程序员使用的算法:

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

或者在没有每个循环的语言中:

index = 0
while index <len(items):
 print(index, items[index])
 index += 1

或者有时在Python中更常见(但是通常是单一的):

for index in range(len(items)):
 print(index, items[index])
使用枚举函数

of python enumerate 函数通过隐藏索引的会计来减少视觉混乱,并将iterable封装到另一个可迭代的( 一个 enumerate 对象) 中,该( 一个 enumerate 对象) 产生索引的两项元组和原始iterable将提供的项,这看起来像这样:

for index, item in enumerate(items, start=0): # default is zero
 print(index, item)

这个代码示例相当不错规范示例 python 的惯用代码和非代码的代码之间的差异 。惯用代码是复杂的( 但不复杂) python,以它的打算使用的方式编写。惯用代码是语言的设计者所期望的这意味着通常这段代码不仅更具可读性,而且更高效 。

获得计数

即使你不需要索引,但是你需要计算迭代次数( 有时想要) 你可以从 1 开始,最终的数字将是你的计数 。

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']

现在我们通过这个iterable枚举,创建一个枚举对象:

enumerate_object = enumerate(items) # the enumerate object

我们可以从这个迭代中拉出第一个项目,我们将在 next 函数的循环中得到它

iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)

我们看到第一个索引是 0 第一个是 'a' 元组:

(0, 'a')

我们可以使用称为"序列解压缩"的方法从这两个元组中提取元素:

index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.

当我们检查 index 时,我们发现它是指第一个索引,0和 item 指的是第一项,'a'

>>> print(index)
0
>>> print(item)
a
结束语
  • python 索引从零开始
  • 若要在迭代时从iterable获取这些索引,请使用枚举函数
  • 在( 以及元组解包) 中使用枚举方法可以创建更加可读和可维护的代码:

这样做:

for index, item in enumerate(items, start=0): # Python indexes start at zero
 print(index, item)
原作者:
124 1

1 以外的 1 启动它非常简单:

for index, item in enumerate(iterable, start=1):
 print index, item

便笺

重要的提示,虽然有点误导,因为 index 将是 tuple,这样做很好。

原作者:
127 3

就像 python 中的规范一样,有几种方法可以做到这一点。在所有示例中,假定:lst = [1, 2, 3, 4, 5]

1.使用枚举( 被认为是最常用的)

for index, element in enumerate(lst):
 # do the things that need doing here

在我看来这也是最安全的选择,因为进入无限递归的机会已经被消除了。item及其索引都保存在变量中,不需要编写任何进一步的代码来访问项。

2.创建变量以保存索引( 使用 for )

for index in range(len(lst)): # or xrange
 # you will have to write extra code to get the element

3 。创建变量以保存索引( 使用 while )

index = 0
while index <len(lst):
 # you will have to write extra code to get the element
 index += 1 # escape infinite recursion

4.总是有另一种方法

如前所述,还有其他方法可以做到这一点,这里没有解释,甚至可能在其他情况下会应用更多,例如使用 itertools.chain。它处理嵌套循环比其他示例更好。

原作者:
...