Почему алгоритм зацикливается, и как это решить?
У меня есть список:
lst = [[9, 18], [24, 30], [12, 15], [2, 4], [14, 15], [25, 26]]
Этот список отрезков, где первый элемент - это начало, а второй - конец. Список отсортирован, начиная с отрезка с максимальной длиной до отрезка с минимальной длиной. Т.е. длина первого отрезка:
18 - 9 = 9, этот отрезок самый длинный.
Длина последнего отрезка:
26 - 25 = 1, этот отрезок - самый короткий
Нужно понять, какие отрезки являются частью других отрезков, а какие - нет.
Если отрезки не являются частью других отрезков в списке (родители), то мы их добавляем в отдельный список, если они являются частью других отрезков - добавляем запись в словарь, где ключом является меньший отрезок, а значением - больший.
На выходе у нас будет:
parents = [[9,18], [24,30],[2,4]]
childrens = { (12, 15): (9,18),
(14, 15): (9, 18),
(25, 26): (24,30)
}
Вот мое решение:
parents = [lst[0]]
childrens = {}
for i in lst[1:]:
for k in parents:
if (k[0] < i[0]) and (k[1] > i[1]):
childrens[k] = i
else:
parents.append(k)
Это решение у меня зацикливается. Как решить задачу без зацикливания? Спасибо!