Этот вопрос кажется дубликатом Объединение интервалов в Python.
Если я правильно понял задачу, у вас есть список интервалов (1 5; 2 8; 9 12; 20 30) и диапазон (0 200), и вы хотите получить позиции за пределами ваших интервалов, но внутри заданного диапазона. Верно?
В этом вам может помочь библиотека Python: python-intervals (также доступно в PyPI с использованием pip). Отказ от ответственности: я являюсь сопровождающим этой библиотеки.
Предположим, вы импортируете эту библиотеку следующим образом:
import intervals as I
Получить ответ довольно легко. По сути, вы сначала хотите создать дизъюнкт интервалов на основе тех, которые вы предоставляете:
inters = I.closed(1, 5) | I.closed(2, 8) | I.closed(9, 12) | I.closed(20, 30)
Затем вы вычисляете дополнение этих интервалов, чтобы получить все, что находится «снаружи»:
compl = ~inters
Затем вы создаете объединение с [0, 200], так как хотите ограничить точки этим интервалом:
print(compl & I.closed(0, 200))
Это приводит к:
[0,1) | (8,9) | (12,20) | (30,200]
person
Guybrush
schedule
08.04.2018