Manipulação eficiente de uma lista de coordenadas cartesianas em Python

Fundo:

Estou escrevendo um programa que manipula grandes quantidades de dados relacionados às redes de vértices de várias formas regulares. Eu tenho um gerador de trabalho que produz uma lista de coordenadas cartesianas correspondentes aos vértices das referidas formas com base em uma gama de parâmetros de entrada do usuário. Os dados são então passados ​​para filtros que limpam entradas duplicadas, classificam os dados e várias outras funções, de onde os dados limpos são alimentados para um módulo de tela que percorre e desenha os vértices.

Questão:

Eu preciso implementar um novo filtro que percorra eficientemente as coordenadas, comparando cada par contra todos os outros pares, ou seja,(x1,y1)->(x2,y2) para(x1,y1)->(xn,yn), (x2,y2)->(x3,y3) para(x2,y2)->(xn,yn) etc. para todas as entradas e, por exemplo, se a relação entre(x1,y1) e(x5,y5) encaixa[(x5-x1)^2+(y5-y1)^2]=vertex_spacing^2Em seguida, os dois conjuntos de coordenadas são emparelhados com os respectivos números de entrada de lista e anexados a uma nova lista em que uma entrada seria do formulário:[(x1,y1), (x5,y5), 0, 4] por exemplo. Qual é o método mais eficiente para alcançar isso?

Minhas tentativas:

Eu olhei alguns métodos para lidar com listas aqui e em vários guias. Eu tentei aninhado 'for' e 'if' loops, mas encontrar enquanto este método pode trabalhar leva a excessivamente longos tempos de execução, bem como a tentativa de quebrar o problema em vários loops for menor.

Notas adicionais:

O objetivo final disso é usar as coordenadas resultantes dos elementos da interface front-end e salvá-las e importá-las conforme necessário. A função da lista posiciona 0 e 4 em[(x1,y1), (x5,y5), 0, 4] é ativar a interface para agrupar coordenadas para uso posterior em objetos de tela. O método deve ser capaz de processar potencialmente milhares de coordenadas.

Agradeço antecipadamente por qualquer ajuda, estou naturalmente disposto a melhorar o fraseado / informação que eu forneci e / ou adicionar código de exemplo, se não está claro o que estou perguntando de qualquer maneira, eu ainda sou muito novo para isso! :)

questionAnswers(4)

yourAnswerToTheQuestion