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

后端 未结 4 438
臣服心动
臣服心动 2021-01-31 20:29
for elt in itertools.chain.from_iterable(node):

if elt is the last element:
  do statement

How do I achieve this

相关标签:
4条回答
  • 2021-01-31 20:49

    You can't per se. You'd need to store the current item, advance the iterator, and catch the StopIteration exception. And then you'd need to somehow signal that you have the last item.

    0 讨论(0)
  • 2021-01-31 20:54

    When the loop ends, the elt variable doesn't go out of scope, and still holds the last value given to it by the loop. So you could just put the code at the end of the loop and operate on the elt variable. It's not terribly pretty, but Python's scoping rules aren't pretty either.

    The only problem with this (thanks, cvondrick) is that the loop might never execute, which would mean that elt doesn't exist - we'd get a NameError. So the full way to do it would be roughly:

    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
    
    0 讨论(0)
  • 2021-01-31 20:58

    I do something like this:

    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()
    
    0 讨论(0)
  • 2021-01-31 20:59

    You can do this by manually advancing the iterator in a while loop using iter.next(), then catching the StopIteration exception:

    >>> 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
    >>> 
    
    0 讨论(0)
提交回复
热议问题