a = [1, 2, 3, 8, 10, 15, 16, 17, 18, 22, 23, 27, 30, 31]
b = a[1:]
b
c = [(i[1] - i[0]) for i in zip(a[:-1], b)]
c
d = [i[0] for i in enumerate(c) if i[1] > 2]
d
e = [-1] + d + [len(a)]
e
[a[l[0] + 1:l[1] + 1] for l in zip(e, e[1:])]
Как разбить отсортированный список на подсписки, когда разница между двумя соседними значениями превышает пороговое значение