from collections import deque
 
class splitby:
    # [''.join(s) for s in splitby('AAAABBBCCDAABBB', operator.eq)] --> ['AAAA', 'BBB', 'CC', 'D', 'AA', 'BBB']
    def __init__(self, iterable, splitter):
        self.splitfunc = splitter
        self.it = iter(iterable)
        self.segment = None
    def __iter__(self):
        return self
    def __next__(self):
        if self.segment:
            deque(self.segment, maxlen=0)
            if self.segment is None:
                raise StopIteration
        else:
            self.curvalue = next(self.it)
        self.segment = self._splitter()
        return self.segment
    def _splitter(self):
        split = False
        while not split:
            yield self.curvalue
            prev = self.curvalue
            try:
                self.curvalue = next(self.it)
            except StopIteration:
                self.segment = None
                return
            split = self.splitfunc(prev, self.curvalue)
 
from operator import gt
x = [1, 2, 3, 4, 1, 2, 3, 1, 2, 1]
print([list(s) for s in splitby(x, gt)])