code: def split_at(iterable, pred):
      
      buf = []
      for item in iterable:
          if pred(item):
              yield buf
              buf = []
          else:
              buf.append(item)
      yield buf
docs: Yield lists of items from *iterable*, where each list is delimited by
      an item where callable *pred* returns ``True``. The lists do not include
      the delimiting items.
  
          >>> list(split_at('abcdcba', lambda x: x == 'b'))
          [['a'], ['c', 'd', 'c'], ['a']]
  
          >>> list(split_at(range(10), lambda n: n % 2 == 1))
          [[0], [2], [4], [6], [8], []]