两次迭代枚举对象

时间:2018-03-28 14:52:48

标签: python list enumeration

我创建了一个枚举对象,并通过枚举迭代了一个列表。之后,我尝试第二次,我无法在解释器中获取任何输出。

myList = ["Red", "Blue", "Green", "Yellow"]
enum = enumerate(myList, 0)

for i in enum:  # this printed the output
    print(i)

for j in enum:  # this did not print the output
    print(j)

为什么我不能两次使用枚举对象?

1 个答案:

答案 0 :(得分:3)

enumerate是一个迭代器,这意味着一旦它在单个上运行,即循环或next被调用,它对内存中值的引用已经用尽,因此,仅仅是一个空列表( [])将是第二次在结构上调用nextfor已应用的结果。

但是,要解决此问题,您可以将结果转换为列表,或将内容添加到另一个列表中:

val = iter([i**2 for i in range(10)])
new_result = list(val)
>>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#create a new structure: 
val = iter([i**2 for i in range(10)])
other_val = [ for i in val]

或者,应用next

val = iter([i**2 for i in range(10)])
while True: 
   try:
     v = next(val)
     #do something with v
   except StopIteration:
     break