【问题标题】:Empty list when using "reversed" iterator a second time [duplicate]第二次使用“反向”迭代器时的空列表[重复]
【发布时间】:2021-04-22 17:57:05
【问题描述】:

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

str1 = 'Hello'

str2 = reversed(str1)

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

输出:

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

【问题讨论】:

  • 相关:this post 仅在 2 天前——尽管在这种情况下是 filter(虽然原理相同)。

标签: python python-3.x


【解决方案1】:

reversed 是一个迭代器,迭代器只能被使用一次,这意味着一旦你对它们进行迭代,你就不能再这样做了。

Check the documentation

【讨论】:

    【解决方案2】:

    [] 的原因(空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
    

    【讨论】:

    • 比较常见的解决方案是将迭代器转为列表:str2 = list(reversed(str1))
    • 两次调用reversed 似乎很浪费。您几乎总是希望在代码中重复使用反向列表(可能多次),因此值得立即调用 list 来转换它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    相关资源
    最近更新 更多