您好,我发现了一个有趣的片段:
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在这里做什么?
非常感谢!
您好,我发现了一个有趣的片段:
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在这里做什么?
非常感谢!
enumerate
本质上将输入列表的每个元素转换为元组列表,其中第一个元素作为索引,元素作为第二个元素。enumerate(['one', 'two', 'three'])
因此变成[(0, 'one'), (1, 'two'), (2, 'three')]
紧随其后的位for
分配给枚举中每个元组的i
第一个元素和第二个元素。element
因此,例如在第一次迭代中,i == 0
and element == 'one'
,您只需通过其他元组来获取其他迭代的值。
enumerate函数的实际定义是这样的
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' is not defined。
我不确定你想要什么,知道枚举或这里发生了什么。这可能会有所帮助:
seq = ["one", "two", "three"]
for i range(3):
seq[i] = '%d: %s' % (i, seq[i])
>>> seq
['0: one', '1: two', '2: three']
实际上,这里的“seq”是列表类的对象。列表中的每个元素都引用了不同类的独立对象。在上述功能时;首先通过访问“seq[i]”获取每个列表元素对象的引用,使用引用的对象值创建一个新对象(可以属于其他类),现在你再次将“seq[i]”引用到新创建的每个元素的对象。
你说的对。seq 未定义。您的代码段将不起作用。只有在 seq 之前设置为 seq = ['one', 'two', 'three'] 时它才会起作用。去尝试一下!