您好我发现了一个有趣的片段:
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在这里做什么?
非常感谢!
答案 0 :(得分:3)
enumerate
实际上将输入列表的每个元素转换为元组列表,第一个元素作为索引,元素作为第二个元素。因此enumerate(['one', 'two', 'three'])
变为[(0, 'one'), (1, 'two'), (2, 'three')]
for
之后的位稍微分配i
到第一个元素,而element
分配给枚举中的每个元组。例如,在第一次迭代中,i == 0
和element == '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']之前才有效。试试吧!