def find_first(predicate, iterable):
    """ Return the first element in iterable that satisfies predicate or None """
    try: return next(filter(predicate, iterable))
    except StopIteration: return None