为何Python的enumerate对象无法进行两次迭代?
为什么enumerate对象无法被两次迭代?
这个问题的核心原因很简单:enumerate()返回的是一个迭代器(iterator),而不是像列表那样可以重复遍历的容器。
迭代器的特性
迭代器的设计思路是「一次性遍历」——它内部维护着一个指针,每次调用next()方法(for循环本质上就是自动调用next())时,指针会向后移动并返回当前元素,直到所有元素都被取完,此时会抛出StopIteration异常,for循环就会终止。
当你第一次用for循环遍历enum时,已经把迭代器里的所有元素都取完了,指针停在了最后一个元素的位置。第二次再尝试遍历的时候,迭代器已经没有剩余元素可以返回,所以for循环直接结束,自然不会输出任何内容。
解决方案
如果你需要多次遍历枚举后的内容,有两种常用方法:
每次迭代时重新生成enumerate对象
既然迭代器只能用一次,那每次需要遍历的时候重新创建一个就好了:myList = ["Red", "Blue", "Green", "Yellow"] # 第一次迭代 for i in enumerate(myList, 0): print(i) # 第二次迭代重新生成enumerate对象 for j in enumerate(myList, 0): print(j)将enumerate对象转换为列表
列表是可重复遍历的可迭代对象,你可以先把enumerate()的结果转换成列表,之后就能多次遍历这个列表了:myList = ["Red", "Blue", "Green", "Yellow"] enum = list(enumerate(myList, 0)) # 转换为列表 for i in enum: print(i) for j in enum: print(j)
这两种方法都能让你实现多次遍历枚举内容的需求。
内容的提问来源于stack exchange,提问作者Goktug
相关产品推荐
相关产品推荐

