Эффективное манипулирование списком декартовых координат в Python
Я пишу программу, которая обрабатывает большие объемы данных, связанных с сетями вершин различных правильных форм. У меня есть рабочий генератор, который выдает список декартовых координат, соответствующих вершинам указанных фигур, на основе диапазона пользовательских параметров ввода. Затем данные передаются в фильтры, которые очищают повторяющиеся записи, сортируют данные и различные другие функции, откуда очищенные данные поступают в модуль холста, который проходит по циклу и рисует вершины.
Вопрос:Мне нужно реализовать новый фильтр, который эффективно проходит по координатам, сравнивая каждую пару с любой другой парой, т.е.(x1,y1)
->(x2,y2)
в(x1,y1)
->(xn,yn)
, (x2,y2)
->(x3,y3)
в(x2,y2)
->(xn,yn)
и т.д. для всех записей и, например, если связь между(x1,y1)
а также(x5,y5)
припадки[(x5-x1)^2+(y5-y1)^2]=vertex_spacing^2
затем эти два набора координат соединяются с соответствующими номерами записей списка и добавляются в новый список, где одна запись будет иметь вид:[(x1,y1), (x5,y5), 0, 4]
например. Какой самый эффективный метод для достижения этой цели?
Я рассмотрел довольно много методов для обработки списков здесь и в различных руководствах. Я пытался использовать вложенные циклы «for» и «if», но обнаружил, что, хотя этот метод может работать, он приводит к чрезмерно долгому времени выполнения, а также к попытке разбить проблему на многочисленные меньшие циклы for.
Дополнительные примечания:Конечная цель этого состоит в том, чтобы использовать полученные координаты для интерфейсных элементов интерфейса, а также сохранять и импортировать их по мере необходимости. Функция списка позиций 0 и 4 в[(x1,y1), (x5,y5), 0, 4]
заключается в том, чтобы включить интерфейс для группировки координат для последующего использования в объектах холста. Метод должен быть способен обрабатывать потенциально тысячи координат.
Заранее благодарю за любую помощь, я, конечно, готов улучшить формулировку / информацию, которую я предоставил, и / или добавить пример кода, если неясно, что я спрашиваю в любом случае - я все еще новичок в этом! :)