code: def rstrip(iterable, pred):
      
      cache = []
      cache_append = cache.append
      cache_clear = cache.clear
      for x in iterable:
          if pred(x):
              cache_append(x)
          else:
              yield from cache
              cache_clear()
              yield x
docs: Yield the items from *iterable*, but strip any from the end
      for which *pred* returns ``True``.
  
      For example, to remove a set of items from the end of an iterable:
  
          >>> iterable = (None, False, None, 1, 2, None, 3, False, None)
          >>> pred = lambda x: x in {None, False, ''}
          >>> list(rstrip(iterable, pred))
          [None, False, None, 1, 2, None, 3]
  
      This function is analogous to :func:`str.rstrip`.