У меня есть набор диапазонов, которые могут выглядеть примерно так:
[(0, 100), (150, 220), (500, 1000)]
Затем я бы добавил диапазон, скажем (250, 400)
, и список будет выглядеть следующим образом:
[(0, 100), (150, 220), (250, 400), (500, 1000)]
Затем я попытался бы добавить диапазон (399, 450)
, и он будет ошибочным, потому что это перекрыло (250, 400)
.
Когда я добавляю новый диапазон, мне нужно выполнить поиск, чтобы убедиться, что новый диапазон не перекрывает существующий диапазон. И ни один диапазон никогда не будет в списке, который перекрывает другой диапазон в списке.
С этой целью я хотел бы, чтобы структура данных дешево поддерживала свои элементы в отсортированном порядке и быстро позволяла мне находить элемент до или после определенного элемента.
Есть ли лучший способ решить эту проблему? Есть ли такая структура данных, которая доступна в Python? Я знаю, что существует модуль bisect
, и, вероятно, я буду использовать. Но я надеялся, что есть что-то лучше.
Изменить: Я решил эту проблему с помощью модуля bisect
. Вот ссылка на код. Это немного долго, поэтому я не буду публиковать его здесь: