【问题标题】:Why does calling the list constructor twice result in an empty list? [duplicate]为什么两次调用列表构造函数会导致一个空列表? [复制]
【发布时间】:2016-01-05 17:56:39
【问题描述】:

我现在正在学习python,遇到一个不知道为什么的问题

>>> a = [1,2,3,4]
>>> b = reversed(a)
>>> list(b)
[4, 3, 2, 1]
>>> list(b)
[]

为什么我第二次调用 list(b) 它返回一个空列表

【问题讨论】:

  • 问问自己:b 是什么? list() 到底是做什么的?
  • 这不是重复的。
  • 或者,不是那个问题的重复。
  • @erip 是的。完全一样。甚至到生成器为reversed

标签: python


【解决方案1】:

原因是b 不是倒排列表本身,而是一个listreverseiterator。因此,当您第一次调用 list() 时,它会遍历 b 并根据该迭代器的输出项创建一个新列表。当您第二次执行此操作时,b 仍然是原始迭代器,并且已经遍历了所有项目,因此它不会迭代任何内容,从而导致一个空列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多