繁体   English   中英

Python如何检查迭代器工具链中是否已到达最后一个元素?

[英]Python How to I check if last element has been reached in iterator tool chain?

for elt in itertools.chain.from_iterable(node):

if elt is the last element:
  do statement

我如何实现这一目标

您可以使用iter.next()在 while 循环中手动推进迭代器,然后捕获StopIteration异常:

>>> from itertools import chain
>>> it = chain([1,2,3],[4,5,6],[7,8,9])
>>> while True:
...     try:
...         elem = it.next()
...     except StopIteration:
...         print "Last element was:", elem, "... do something special now"
...         break
...     print "Got element:", elem
...     
... 
Got element: 1
Got element: 2
Got element: 3
Got element: 4
Got element: 5
Got element: 6
Got element: 7
Got element: 8
Got element: 9
Last element was: 9 ... do something special now
>>> 

当循环结束时, elt变量不会超出范围,并且仍然保存循环给它的最后一个值。 所以你可以把代码放在循环的末尾,然后对elt变量进行操作。 它不是很漂亮,但是 Python 的作用域规则也不是很漂亮。

唯一的问题(感谢 cvondrick)是循环可能永远不会执行,这意味着elt不存在 - 我们会得到一个NameError 因此,完整的方法大致是:

del elt # not necessary if we haven't use elt before, but just in case
for elt in itertools.chain.from_iterable(node):
    do_stuff_to_each(elt)
try:
    do_stuff_to_last(elt)
except NameError: # no last elt to do stuff to
    pass

我做这样的事情:

rng = len(mlist)
for i in range(rng):
    foo = mlist[i]
    foo.do_something_for_every_item_regardless()
    if i == rng - 1: #since we go from 0 to rng-1
        foo.last_item_only_operation()

你本身不能。 您需要存储当前项目、推进迭代器并捕获StopIteration异常。 然后你需要以某种方式表明你有最后一个项目。


while True:
    try:
      print(next(myIterator))
    except StopIteration:
        break

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM