Python 使用“时为空列表”;颠倒;第二次迭代

Python 使用“时为空列表”;颠倒;第二次迭代,python,python-3.x,Python,Python 3.x,为什么第二个打印命令给出一个空列表,而第一个命令给出正确的输出 str1 = 'Hello' str2 = reversed(str1) print(list(str2)) print(list(str2)) 输出: ['o', 'l', 'l', 'e', 'H'] [] []的原因(空) 内置的是一个迭代器,所以一旦您使用了它,它就会通过生成一个。在你的情况下,一旦你做了一件事,列表(尊敬的(“你好”),它就会变得精疲力竭 解决方案 快速解决方案可能是生成另一个迭代器,代码: str

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

str1 = 'Hello'

str2 = reversed(str1)

print(list(str2))
print(list(str2))
输出:

['o', 'l', 'l', 'e', 'H']
[]
[]
的原因(空) 内置的是一个迭代器,所以一旦您使用了它,它就会通过生成一个。在你的情况下,一旦你做了一件事,
列表(尊敬的(“你好”)
,它就会变得精疲力竭

解决方案 快速解决方案可能是生成另一个迭代器,代码:

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

reversed是一个迭代器,迭代器只能使用一次,也就是说,一旦您对迭代器进行了迭代,就不能再使用了


相关:从2天前开始——虽然在这种情况下是
过滤器
(尽管原理相同)。更常见的解决方案是将迭代器转换为列表:
str2=list(reversed(str1))
调用
reversed
两次似乎是浪费。您几乎总是希望在代码中重复使用反向列表(可能多次),因此值得调用
list
来立即转换它。