recognizing empty iterators

Michele Simionato mis6 at pitt.edu
Thu Jul 24 17:06:55 EDT 2003


After some thinking, and having read the suggestion in this thread, 
I see that the source of my problem was the following: whereas an
empty list or an empty tuple has a truth value of False, an empty
iterator has a truth value of True. It is easy to fix, anyway, with
a function which works as "iter", but return an empty list (or tuple)
when the iterator is empty:

import itertools

def iter_(seq):
    i=iter(seq)
    try:
        first=i.next()
    except StopIteration:
        return []
    return itertools.chain([first],i) 

Maybe not very elegant, but it works:

it=iter_('xyz')
for c in it:
    print c

if iter_(it):
    print "non empty"
else:
    print "is empty"

BTW, the fact that an empty iterator is True is somewhat strange,
considering that [],() and "" are False; on the other hand, generic
objects are True, so the point can be debated ...


    Michele




More information about the Python-list mailing list