Из документации python :
>>> # Find runs of consecutive numbers using groupby. The key to the solution
>>> # is differencing with a range so that consecutive numbers all appear in
>>> # same group.
>>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]
>>> for k, g in groupby(enumerate(data), lambda (i,x):i-x):
... print map(itemgetter(1), g)
...
[1]
[4, 5, 6]
[10]
[15, 16, 17, 18]
[22]
[25, 26, 27, 28]
Функция groupby () из модуля itertools генерирует разрыв каждый раз, когда ключевая функция меняет свое возвращаемое значение. Хитрость в том, что возвращаемое значение - это число в списке за вычетом положения элемента в списке. Эта разница изменяется при наличии разрыва в числах.
Функция itemgetter () из операторского модуля , вам придется импортировать его и модуль itertools для работы этого примера.
Полный пример с вашими данными:
>>> from operator import itemgetter
>>> from itertools import *
>>> seq2 = [1, 2, 4, 5, 6, 8, 9, 10]
>>> list = []
>>> for k, g in groupby(enumerate(seq2), lambda (i,x):i-x):
... list.append(map(itemgetter(1), g))
...
>>> print list
[[1, 2], [4, 5, 6], [8, 9, 10]]
Или как списочное понимание:
>>> [map(itemgetter(1), g) for k, g in groupby(enumerate(seq2), lambda (i,x):i-x)]
[[1, 2], [4, 5, 6], [8, 9, 10]]