Find the first element that meets the condition
Peter Otten
__peter__ at web.de
Sun Feb 25 05:41:36 EST 2007
jm.suresh at no.spam.gmail.com 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
More information about the Python-list
mailing list