Вы можете сделать следующее:
from itertools import groupby, count
from operator import itemgetter
data = [('a', 12), ('b', 13), ('c', 15), ('c', 16), ('c', 17)]
def key(i, cursor=count(0)):
"""Generate the same key for consecutive numbers"""
return i[1] - next(cursor)
ordered = sorted(data, key=itemgetter(1))
result = [list(group) for _, group in groupby(ordered, key=key)]
print(result)
Вывод
[[('a', 12), ('b', 13)], [('c', 15), ('c', 16), ('c', 17)]]
Вышеприведенный пример основан на старом примере, найденном в документации Python 2,6 здесь .
Чтобы лучше проиллюстрировать, что происходит, для следующего примера:
lst = [12, 13, 15, 16, 17]
print([v - i for i, v in enumerate(lst)])
Сгенерированные ключи:
[12, 12, 13, 13, 13]
Как видно, последовательные запуски иметь тот же ключ.