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