Попробуйте таким образом, определив пользовательский метод для нарезки массива на основе условия:
def take_max_three(iterable):
iterable = sorted(iterable) # It requires the iterable to be sorted, remove if already sorted
i, x, size = 0, 0, len(iterable)
while i < size-1:
if iterable[i] < iterable[i+1]:
ready = iterable[x:i+1]
if len(ready) <= 3:
yield ready
else:
yield ready[0:3]
x = i + 1
i += 1
yield iterable[x:x+3]
Затем просто вызовите метод в массиве, это слегка модифицированный массив:
array = [1, 1, 2, 3, 4, 5, 5, 1, 5, 6, 6, 6, 7, 3, 7, 7, 8, 8, 8, 8, 8, 9]
take_max_three(array)
# => [[1, 1, 1], [2], [3, 3], [4], [5, 5, 5], [6, 6, 6], [7, 7, 7], [8, 8, 8], [9]]
Вы можете дополнительно настроить метод, передавая количество элементов, которые нужно взять.