"Michael Hoffman" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > wcc wrote: > >> Beginner learning Python here. I know filter(lambda x: x > 3, [1, 2, >> 5, -3, 4, 8]) will give me a list [5, 4, 8]. What if I only need to >> find the first item in the list that returns Ture when applying the >> filter function. In this case, I only want to get the 5, and its index
You have made two important changes to the function return value. Filter returns a list of items. You want an item and index. What if there is no first item? >> 2. Is there a built-in function, or function from a module for that? >> I think it is not hard to write a function for this. But knowing >> Python is "battery included", I thought I'd like to ask. A 'battery' is something like the email, html, xml modules that assist major application areas. Not every easily written 3-line function ;-) > You can use a generator expression like this: > > >>> items = [1, 2, 5, -3, 4, 8] > >>> ((index, item) for index, item in enumerate(items) if item > > >>> 3).next() > (2, 5) >>> items = [0,1,2,3] >>> ((index, item) for index, item in enumerate(items) if item > 3).next() Traceback (most recent call last): File "<pyshell#82>", line 1, in -toplevel- ((index, item) for index, item in enumerate(items) if item > 3).next() StopIteration I believe ifilter from the itertools module will act the same. Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list