Отсортировать соединённые координаты

Есть список кортежей соединенных координат, например:

[((0, 0), (0, 1)), ((0, 1), (0, 2)), ((0, 2), (0, 3)), ((1, 3), (1, 4)), ((1, 4), (1, 5))]

Как я могу отсортировать координаты, чтобы список не содержал повторений, и сгруппировать соединенные координаты в один кортеж? Количество координат в списке может быть разное:

[((0, 0), (0, 3)), ((1, 3), (1, 5))]

Второй элемент в кортеже должен совпадать с первым, чтобы считаться соединенным:

((0, 0), (0, 1))
((0, 1), (0, 2))
((0, 2), (0, 3))

((0, 0), (0, 3))


((1, 3), (1, 4))
((1, 4), (1, 5))

((1, 3), (1, 5))

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

Автор решения: Serg Bocharov

Как один из вариантов можете попробовать так:

main_list = ([((0, 0), (0, 1)), ((0, 1), (0, 2)), ((0, 2), (0, 3)), ((1, 3), (1, 4)), ((1, 4), (1, 5))])


def sorting(test_list: list):
    coords = sorted(test_list)
    res = []
    start = coords[0][0]
    end = coords[0][1]
    for elem in coords:
        if elem[0][0] != start[0]:
            res.append((start, end))
            start = elem[0]
            end = elem[1]

        elif elem[0][0] == start[0] and elem[1][1] > end[1]:
            end = elem[1]

    res.append((start, end))
    return res


print(sorting(main_list))

Вывод:

[((0, 0), (0, 3)), ((1, 3), (1, 5))]
→ Ссылка