Не имейте полученного a итераторов Python hasNext
метод?
Нет, такого метода нет. Конец итерации обозначается исключением. См. документацию -.
. Если вам действительно нужна функциональность has-next
(потому что вы просто добросовестно транскрибируете алгоритм из реализации ссылки на Java, скажем, или потому что вы пишите прототип, который will должен быть легко транскрибирован на Java, когда он закончен), то легко получить его с помощью небольшого оберточного класса. Например:
class hn_wrapper(object):
def __init__(self, it):
self.it = iter(it)
self._hasnext = None
def __iter__(self): return self
def next(self):
if self._hasnext:
result = self._thenext
else:
result = next(self.it)
self._hasnext = None
return result
def hasnext(self):
if self._hasnext is None:
try: self._thenext = next(self.it)
except StopIteration: self._hasnext = False
else: self._hasnext = True
return self._hasnext
теперь что-то вроде
x = hn_wrapper('ciao')
while x.hasnext(): print next(x)
излучает
c
i
a
o
по мере необходимости.
Обратите внимание, что использование next(sel.it)
как встроенного требует Python 2.6 или лучше; если вы используете более старую версию Python, используйте self.it.next()
вместо этого (и аналогично для next(x)
в примере использования). [[Вы можете обоснованно считать эту заметку излишней, так как Python 2.6 существует уже более года -- но чаще, когда я использую функции Python 2.6 в ответе, какой-нибудь комментатор или другой человек чувствует себя обязанным указать, что они являются 2.6 функциями, таким образом, я пытаюсь предупредить такие комментарии хоть раз;-)]
В дополнение ко всем упоминаниям StopIteration, цикл Python "for" просто делает то, что вы хотите:
>>> it = iter("hello")
>>> for i in it:
... print i
...
h
e
l
l
o
hasNext
несколько переводится на StopIteration
исключение, например:
>>> it = iter("hello")
>>> it.next()
'h'
>>> it.next()
'e'
>>> it.next()
'l'
>>> it.next()
'l'
>>> it.next()
'o'
>>> it.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
StopIteration
docs: http://docs.python.org/library/exceptions.html#exceptions.StopIterationМожно tee
итератор, используя, itertools.tee
, и проверить StopIteration
на итераторе teed.
Нет. Наиболее похожая концепция, скорее всего, StopIteration exception.
Я полагаю, что у питона только что появилась следующая() и, согласно доку, он бросает исключение, что элементов больше нет.
Попробуйте метод __length_hint__() от любого объекта итератора:
iter(...).__length_hint__() > 0