It looks like homework. Sometimes the simpler code is better: def splitter(seq): if not seq: return [] result = [] current = [seq[0]] for pos, el in enumerate(seq[1:]): if el - current[-1] > 1: result.append(current[:]) current = [] current.append(el) result.append(current) return result
print splitter([1, 2, 3, 5, 6, 8, 12]) print splitter([1, 1, 1, 2, 2, 5, 6]) print splitter([1, 1, 1, 1, 1, 1, 1]) print splitter([1, 2, 3]) print splitter([1]) print splitter([]) print splitter([1.0, 1.1, 1.99, 4.01]) print splitter([1.0, 2.0, 3.0, 4.01]) To reduce memory used you can use islice instead of the slice seq[1:] If you want something less easy to understand, you can try fixing the following code that doesn't work: from itertools import groupby l = [1,2,3,5,6,8,12] keyf = lambda (pos,x): x-l[pos]>1 [[el[1] for el in gr] for he,gr in groupby(enumerate(l[:-1]), keyf)] Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list