Почему алгоритм зацикливается, и как это решить?

У меня есть список:

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)

Это решение у меня зацикливается. Как решить задачу без зацикливания? Спасибо!


Ответы (0 шт):