On Thu, Jun 25, 2015 at 9:59 AM, Ethan Furman <et...@stoneleaf.us> wrote: > I have the following function: > > def phone_found(p): > for c in contacts: > if p in c: > return True > return False > > with the following test data: > > contacts = ['672.891.7280 x999', '291.792.9000 x111'] > main = ['291.792.9001', '291.792.9000'] > > which works: > > filter(phone_found, main) > # ['291.792.9000'] > > My attempt at a lambda function fails: > > filter(lambda p: (p in c for c in contacts), main) > # ['291.792.9001', '291.792.9000'] > > Besides using a lambda ;) , what have I done wrong?
The lambda returns a generator, not a boolean. All generators are truthy. I think you want this instead: filter(lambda p: any(p in c for c in contacts), main) -- https://mail.python.org/mailman/listinfo/python-list