почему next (iter (x)) не переходит к следующей итерации? - PullRequest
0 голосов
/ 12 сентября 2018

Привет, ребята. Я только начинаю учиться программировать на python.Я запутался, почему код итерации работает, когда я назначаю L для iter (x), а затем next (L) для итерации по списку x, как показано ниже:

x=[1,2,3,4,5]
>>> L=iter(x)
>>> next(L)
1
>>> next(L)
2
>>> next(L)
3
>>> next(L)
4
>>> next(L)
5
>>> next(L)

Но когда я пишу вручную далее(iter (x)), чтобы перебрать список x, он не работает:

next(iter(x))
1
>>> next(iter(x))
1
>>> next(iter(x))
1

Я прошу прощения за случай, если какой-либо из технических терминов, которые я использую, является неточным, но я надеюсь, что вы, ребята, понимаете мойвопрос и дать мне несколько советов по этой проблеме.Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018
next(iter(x))

эквивалентно

it = iter(x)
next(it)

Таким образом, во втором случае вы повторяете каждый раз эти две инструкции, в которых вы сначала создаете iterator из iterable, и вы применяетеnext() функция получает каждый раз первый элемент.
Таким образом, вы никогда не потребляете его, а воссоздаете его каждый раз.

0 голосов
/ 12 сентября 2018

В Python итераторы - это объекты, которые используются после создания. В первом примере вы создаете итератор и извлекаете его элементы до тех пор, пока он не будет исчерпан. Во втором примере вы каждый раз создаете новый итератор, извлекаете его первый элемент, а затем отбрасываете его (через сборщик мусора).

...