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

新手上路,请多包涵
for elt in itertools.chain.from_iterable(node):

if elt is the last element:
  do statement

我该如何实现

原文由 Bruce 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 532
2 个回答

当循环结束时, 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

原文由 Chris Lutz 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以使用 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
>>>

原文由 Steven Kryskalla 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题