Andrea Griffini: > Are you sure this is going to do the right thing ?
Argh! I missed these two lines from the documentation: """Note, once tee() has made a split, the original iterable should not be used anywhere else; otherwise, the iterable could get advanced without the tee objects being informed.""" Since the original iterator cannot be reused, we need an alternative approach. Here is a possibility: #<check.py> import itertools def check(it): it_copy1, it_copy2 = itertools.tee(it) try: it_copy2.next() except StopIteration: return None else: return it_copy1 #</check.py> Here a few examples of usage: >>> from check import check >>> it0 = iter([]) >>> print check(it0) # empty iterator, returns None None >>> it1 = iter([1]) >>> it1 = check(it1) # non-empty iterator, returns a copy of the original one >>> it1.next() 1 In general you can use the idiom it = check(it) # check for emptiness if it: # do something This time I have checked the examples here with my doctester http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410052 ;) Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list