Как сделать обратный `range`, то есть создать компактный диапазон на основе набора чисел?
Python имеетrange
метод, который позволяет такие вещи, как:
>>> range(1, 6)
[1, 2, 3, 4, 5]
То, что я ищу, это как бы наоборот: возьмите список чисел и верните начало и конец.
>>> magic([1, 2, 3, 4, 5])
[1, 5] # note: 5, not 6; this differs from `range()`
Это достаточно легко сделать для приведенного выше примера, ноМожно ли учесть пропуски или множественные диапазоны, возвращая диапазон в формате строки, подобном PCRE? Что-то вроде этого:
>>> magic([1, 2, 4, 5])
['1-2', '4-5']
>>> magic([1, 2, 3, 4, 5])
['1-5']
Редактировать: Я ищу решение на Python, но приветствую рабочие примеры и на других языках. Это больше о создании элегантного, эффективного алгоритма. Бонусный вопрос: есть ли язык программирования, который имеет встроенный метод для этого?