Python基础知识:对于i,枚举(seq)中的元素..为什么/如何工作?

时间:2013-01-24 11:02:04

标签: python

您好我发现了一个有趣的片段:

seq = ["one", "two", "three"] #edited
for i, element in enumerate(seq):
    seq[i] = '%d: %s' % (i, seq[i])

>>> seq
['0: one', '1: two', '2: three']

我想知道python是如何做到的......对我来说元素应该是未定义的......但显然它不是...... python在这里做什么?

非常感谢!

4 个答案:

答案 0 :(得分:3)

enumerate实际上将输入列表的每个元素转换为元组列表,第一个元素作为索引,元素作为第二个元素。因此enumerate(['one', 'two', 'three'])变为[(0, 'one'), (1, 'two'), (2, 'three')]

for之后的位稍微分配i到第一个元素,而element分配给枚举中的每个元组。例如,在第一次迭代中,i == 0element == 'one',您只需通过其他元组来获取其他迭代的值。

答案 1 :(得分:2)

枚举函数的实际定义是这样的

enumerate(iterable[, start]) -> iterator for index, value of iterable

Return an enumerate object.  iterable must be another object that supports
iteration.  The enumerate object yields pairs containing a count (from
start, which defaults to zero) and a value yielded by the iterable argument.
enumerate is useful for obtaining an indexed list:
    (0, seq[0]), (1, seq[1]), (2, seq[2]), ...

但是如果未定义参数seq将不会返回所需的输出,而是会抛出类似的错误 - NameError:name'seq'未定义。

答案 2 :(得分:1)

我不确定你想要什么,知道列举或这里发生了什么。 这可能会有所帮助:

seq = ["one", "two", "three"]
for i range(3):
    seq[i] = '%d: %s' % (i, seq[i])

>>> seq
 ['0: one', '1: two', '2: three']

实际上,这里“seq”是list-class的对象。列表中的每个元素都引用不同类的独立对象。在上述功能时; 首先通过访问“seq [i]”得到每个列表元素对象的引用,使用引用的对象值创建一个新对象(可以属于其他类), 现在你再次将“seq [i]”引用到每个元素的新创建对象。

答案 3 :(得分:0)

你是对的。 seq未定义。你的代码片段不起作用。它只有在seq设置为seq = ['one','two','three']之前才有效。试试吧!