Sequence find function in Python Sequence find function in Python python python

Sequence find function in Python


Here's the pattern I use:

mylist = [10, 2, 20, 5, 50]found = next(i for i in mylist if predicate(i))

Or, in Python 2.4/2.5, next() is a not a builtin:

found = (i for i in mylist if predicate(i)).next()

Do note that next() raises StopIteration if no element was found. In most cases, that's probably good. You asked for the first element, no such element exists, and so the program probably cannot continue.

If, on the other hand, you do know what to do in that case, you can supply a default to next():

conf_files = ['~/.foorc', '/etc/foorc']conf_file = next((f for f in conf_files if os.path.exists(f)),                 '/usr/lib/share/foo.defaults')


Actually, in Python 3, at least, filter doesn't go through the entire list.

To double check:

def test_it(x):    print(x)    return x>10var = next(filter(test_it, range(20)))

In Python 3.2, that prints out 0-11, and assigns var to 11.

In 2.x versions of Python you may need to use itertools.ifilter.


If you only want the first greater than 10 you can use itertools.ifilter:

import itertoolsfirst_gt10 = itertools.ifilter(lambda x: x>10, [10, 2, 20, 5, 50]).next()

If you want all greater than 10, it may be simplest to use a list-comprehension:

all_gt10 = [i for i in mylist if i > 10]