[EMAIL PROTECTED] wrote: > I have a list and I want to find the first element that meets a > condition. I do not want to use 'filter', because I want to come out > of the iteration as soon as the first element is found. > I have implemented it this way, may be, there should be a built in > hiding somewhere in the standard libraries? > > def exists(iterable, condition): > ''' > Return the first element in iterble that meets the condition. > ''' > for x in iterable: > if condition(x): > return x > raise Exception('No element meets the given condition.') > > > >>>> exists(xrange(1000), lambda x: x>13) > 14
If you are only interested in existence you can use any() (new in Python2.5) >>> any(x>13 for x in xrange(1000)) True Otherwise there is itertools.ifilter() a lazy variant of the filter() builtin: >>> import itertools >>> items = iter(xrange(1000)) # just to prove... >>> itertools.ifilter(lambda x: x > 13, items).next() 14 >>> items.next() # that ifilter has consumed only the first 15 items 15 You may want to wrap the ifilter() call to get a more sensible exception, say ValueError instead of StopIteration: # untested def findfirst(items, predicate=bool): for item in itertools.ifilter(predicate, items): return item raise ValueError("No matching element") Peter -- http://mail.python.org/mailman/listinfo/python-list