Отсортировать соединённые координаты
Есть список кортежей соединенных координат, например:
[((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))]