使用内置:_enumerate()
>>> list(enumerate([5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]
您的原始代码的错误在于您x
在循环中使用的事实,但是,x
在该循环中没有改变,它只是从您打印值的上一个循环中遗留下来。
但是,这种方法是一种不好的方法。修复它需要按索引循环,这是 Python 不打算做的事情 - 它速度慢且难以阅读。相反,我们按值循环。enumerate()
内置程序可以为我们完成这项工作,因为这是一项相当常见的任务。
如果您真的不想使用enumerate()
(这从来没有真正有意义,但可能是一种任意限制,试图暂时教给您其他东西),那么还有更好的方法:
>>> from itertools import count
>>> list(zip(count(), [5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]
这里我们使用zip()
,这是用于一次循环两组数据的python函数。这从每个可迭代返回第一个值的元组,然后从每个返回第二个值的元组,等等......这给了我们在与 结合时我们想要的结果itertools.count()
,它在锡上所说的那样。
如果你真的觉得需要手动构建一个列表,那么做一些非 Python 的更 Python 的方式是:
enumerated_list = []
count = 0
for item in data:
enumerated_list.append((count, item))
count += 1
但是请注意,通常,人们会使用列表推导来构建这样的列表 - 在这种情况下,一旦这样做,使用早期方法之一会更有意义。这种列表的产生效率低下且难以阅读。