【问题标题】:Iteration Functionality迭代功能
【发布时间】:2021-11-27 00:57:53
【问题描述】:

下面是我用 Python 写的简单程序

Animal = ['tiger','lion','dog','cat']
xyz = iter(Animal)
print(next(xyz))

输出是

tiger

现在我读到iter() 方法指向可迭代的第一个元素,即'tiger',因此第二行将使xyz 指向'tiger' & 然后在我使用next 时在第三行中它应该转到'lion' 并打印它为什么不这样做?

我知道我正在做一些概念上的错误,我什至无法理解 xyz 或迭代器是变量对象还是其他东西。谁能详细说明一下?

【问题讨论】:

  • “变量对象或其他东西”是什么意思? Python 在技术上没有变量,它具有指向对象(值)的标识符(名称)。见Facts and myths about Python names and values
  • “现在我读到 iter() 方法指向可迭代的第一个元素,即“老虎”,”不,这听起来不正确。简单地说,iter 从一个可迭代对象中返回一个迭代器

标签: python python-3.x list iterator iteration


【解决方案1】:

iter() 不“指向可迭代的第一个元素”,它只是返回一个 iterator

>>> xyz
<list_iterator object at 0x7f56c61eb3c8>

例如,您可以将其转回列表:

>>> xyz = iter(Animal)
>>> list(xyz)
['tiger', 'lion', 'dog', 'cat']

但不像列表,它只能被消费一次。

>>> list(xyz)
[]

【讨论】:

    【解决方案2】:

    请注意,iternext 完全按照文档所说的那样做,所以这段代码:

    Animal = ['tiger','lion','dog','cat']
    xyz = iter(Animal)
    for i in range(len(Animal) + 1):
        print(next(xyz))
    

    从头到尾打印所有动物,直到迭代器耗尽:

    tiger
    lion
    dog
    cat
    Traceback (most recent call last):
      File "test.py", line 6, in <module>
        print(next(xyz))
    StopIteration
    

    【讨论】:

      【解决方案3】:

      你有点糊涂了。

      next() 视为“给出当前值,然后将指针移至下一项”。行号与它无关。下次您拨打next(xyz) 时,无论在哪里,您都会收到'lion'

      【讨论】:

      • 我不认为他们的意思是行号
      猜你喜欢
      • 2021-04-29
      • 2014-06-29
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2010-10-03
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多