Вопрос: Кто-нибудь может предложить лучший или более питонический подход к сокращению перекрывающихся пар диапазонов до непересекающихся пар диапазонов?
Справочная информация: у меня есть список кортежей, представляющих начальную и конечную пары.Я пытаюсь по существу завершить объединение всех пар начальных концов.Входные конечные пары имеют перекрывающиеся значения, и выходные данные должны представлять входные начальные конечные пары без какого-либо перекрытия.
Приведенный ниже код является близким, но неверным, поскольку он выводит дополнительный диапазон, которого не было на входе (я такжепонимаю, что это не очень хорошо, и почему это неправильно).Кто-нибудь может предложить лучший подход или какую-то встроенную функцию, которую я упустил из виду?
Извинения за основной вопрос.Спасибо за помощь!
##create example data
pairA =[(0,5),(10,12)]
pairB =[(1,2),(11,15)]
pairC =[(1,4),(10,12),(15,17)]
#combine the lists to one list
#ultimately may have n number of lists and felt it would be easier to
merged = pairA + pairB +pairC
# produce union of list * unpacks the arguments of a list
listUnion= sorted(set().union(*merged))
#this is the piece of code I am looking at improving
#it creates new start end pairs based on the union
lastElement =listUnion[-1]
outList=[]
for item in listUnion:
#create start end pair from value i and i+1
if item != lastElement:
outList.append((item,listUnion[listUnion.index(item)+1]))
else:
#last element of the list, becomes the last element of list pair
#it can be ignored
pass
print outList
"""output: [(0, 1), (1, 2), (2,4), (4, 5), (5, 10), (10, 11), (11, 12), (12, 15), (15,
17)]
correct output: would not have (5,10) as there is no overlap here in the input """
Редактировать: Добавлено визуальное представление проблемы