第二次使用“反向”迭代器时的空列表 [] 的原因空 list解决方案

问题描述

为什么第二个打印命令给出一个空列表而第一个给出正确的输出

str1 = 'Hello'

str2 = reversed(str1)

print(list(str2))
print(list(str2))

输出

['o','l','e','H']
[]

解决方法

reversed 是一个迭代器,迭代器只能被消耗一次,这意味着一旦你迭代它们,你就不能再做一次。

Check the documentation

,

[] 的原因(空 list

内置的 reversed 是一个迭代器,因此一旦您消耗它,它就会耗尽,通过创建 list。在你的情况下,一旦你做到了,list(revered("Hello")),它就会变得,精疲力竭

解决方案

一个快速的解决方案可能是制作另一个迭代器,代码:

str1 = "Hello" # Original String 

iter1 = reversed(str1) # Making the first iterator 
iter2 = reversed(str1) # Making the second iterator 

print(list(iter1),list(iter2)) # Printing the iterator once they are lists