code: def first(iterable, default=None, key=None):
      
      if key is None:
          for el in iterable:
              if el:
                  return el
      else:
          for el in iterable:
              if key(el):
                  return el
  
      return default
docs: Return first element of `iterable` that evaluates true, else return None
      (or an optional default value).
  
      >>> first([0, False, None, [], (), 42])
      42
  
      >>> first([0, False, None, [], ()]) is None
      True
  
      >>> first([0, False, None, [], ()], default='ohai')
      'ohai'
  
      >>> import re
      >>> m = first(re.match(regex, 'abc') for regex in ['b.*', 'a(.*)'])
      >>> m.group(1)
      'bc'
  
      The optional `key` argument specifies a one-argument predicate function
      like that used for `filter()`.  The `key` argument, if supplied, must be
      in keyword form.  For example:
  
      >>> first([1, 1, 3, 4, 5], key=lambda x: x % 2 == 0)
      4