#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