Функциональность итерации

#python #python-3.x #list #iterator #iteration

Вопрос:

Ниже приведена простая программа, которую я написал на Python

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

Результат был

 tiger
 

Теперь я читаю , что iter() метод указывает на первый элемент iterable, то есть 'tiger' , поэтому вторая строка будет xyz указывать на 'tiger' amp;, затем в третьей строке, когда я его использую next , следует перейти 'lion' и напечатать, почему он этого не делает?

Я знаю, что я совершаю какую-то концептуальную ошибку, и я даже не могу понять, xyz являются ли итераторы переменным объектом или чем-то еще. Кто-нибудь может, пожалуйста, уточнить?

Комментарии:

1. Что вы подразумеваете под «переменным объектом или чем — то еще»? Python технически не имеет переменных, у него есть идентификаторы (имена), которые указывают на объекты (значения). Смотрите Факты и мифы об именах и значениях Python

2. «Теперь я прочитал, что метод iter() указывает на первый элемент повторяющегося, т. е. «тигра»»,» нет, это звучит неправильно. Проще говоря, iter возвращает итератор из итерируемого.

Ответ №1:

Вы немного сбиты с толку.

Подумайте о next() том, как «дайте текущее значение, а затем переместите указатель на следующий элемент». Номера строк не имеют к этому никакого отношения. В следующий раз , когда вы позвоните next(xyz) , вы получите 'lion' независимо от того, где это произойдет.

Комментарии:

1. Я не думаю, что они имеют в виду номера строк

Ответ №2:

iter() не «указывает на первый элемент итерируемого», он просто возвращает итератор.

 >>> xyz
<list_iterator object at 0x7f56c61eb3c8>
 

Вы могли бы, например, превратить его обратно в список:

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

Но в отличие от списка, его можно использовать только один раз.

 >>> list(xyz)
[]
 

Ответ №3:

Обратите внимание на это iter и next делайте именно то, что говорят документы, поэтому этот код:

 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