Удалить перекрывающиеся интервалы и разделить на неперекрывающиеся интервалы Python - PullRequest
0 голосов
/ 29 мая 2020

У меня есть отсортированный список интервалов List1: [1,10], [2,4], [6,8], [20,30], [24,28], [35,40], [45,50]

, где я знаю, что перекрывающиеся интервалы List2: [2,4], [6,8], [24,28]

, из которых я хочу получить неперекрывающиеся интервалы, например: [1,2], [4,6], [8,10], [20,24], [28,30], [35,40], [45,50]

Как я могу сделать это эффективно в Python?

Моя первая мысль - создать новый список List1 разделенных интервалов для каждого перекрывающегося интервала, с которым я сталкиваюсь в List2, и удаляю соответствующий элемент List2 (продолжайте это, пока List2 не станет пустым), но у меня возникли проблемы с тем, чтобы это работало. Это кажется отличным по своей природе от многих задач с интервалом, поэтому любое предложение будет отличным!

1 Ответ

1 голос
/ 29 мая 2020

Не знаю, является ли это наиболее эффективным способом, но он может быть для вас хорошей отправной точкой:

data = [[1, 10], [2, 4], [6, 8], [20, 30], [24, 28], [35, 40], [45, 50]]
flat_data = sorted([x for sublist in data for x in sublist])
new_intevals = [flat_data[i:i + 2] for i in range(0, len(flat_data), 2)]

print(new_intevals)
# output: [[1, 2], [4, 6], [8, 10], [20, 24], [28, 30], [35, 40], [45, 50]]
...