Вот рабочий код. Вся простая суть метода - заменить на 0 все номера, у которых соседи слева-справа -1 и + 1 соответственно, затем пробежаться по полученным значениям заменяя все подряд идущие 0 на '-'. Результат склеить через ',', и в завершение заменить ',-,' на '-'
from itertools import groupby
def drop_inner(nums):
for a, b, c in zip([0, 0] + nums, [0] + nums + [0], nums + [0, 0]):
if b:
yield 0 if a and c and (a + 1 == b == c - 1) else b
def shorten(nums):
return ','.join(
str(x) if x else '-' for x, _ in groupby(drop_inner(nums))
).replace(',-,', '-')