Effiziente Bearbeitung einer Liste kartesischer Koordinaten in Python

Hintergrund:

Ich schreibe ein Programm, das große Datenmengen verarbeitet, die sich auf die Netzwerke von Eckpunkten verschiedener regulärer Formen beziehen. Ich habe einen Arbeitsgenerator, der eine Liste von kartesischen Koordinaten erzeugt, die den Eckpunkten der Formen entsprechen, basierend auf einem Bereich von Benutzereingabeparametern. Die Daten werden dann an Filter übergeben, die doppelte Einträge löschen, die Daten sortieren und verschiedene andere Funktionen ausführen. Von dort aus werden die bereinigten Daten einem Canvas-Modul zugeführt, das die Eckpunkte durchläuft und zeichnet.

Frage:

Ich muss einen neuen Filter implementieren, der die Koordinaten effizient durchläuft und jedes Paar mit jedem anderen Paar vergleicht, d. H.(x1,y1)->(x2,y2) zu(x1,y1)->(xn,yn), (x2,y2)->(x3,y3) zu(x2,y2)->(xn,yn) usw. für alle Einträge und zum Beispiel, wenn die Beziehung zwischen(x1,y1) und(x5,y5) passt[(x5-x1)^2+(y5-y1)^2]=vertex_spacing^2Anschließend werden die beiden Koordinatensätze mit ihren jeweiligen Listeneintragsnummern gepaart und an eine neue Liste angehängt, in der ein Eintrag die Form hat:[(x1,y1), (x5,y5), 0, 4] zum Beispiel. Was ist die effizienteste Methode, um dies zu erreichen?

Meine Versuche:

Ich habe mir hier und in verschiedenen Handbüchern einige Methoden für den Umgang mit Listen angesehen. Ich habe versucht, verschachtelte 'for'- und' if'-Schleifen zu verwenden, aber es hat zu übermäßig langen Laufzeiten geführt, und ich habe versucht, das Problem in zahlreiche kleinere for-Schleifen aufzuteilen.

Weitere Hinweise:

Das ultimative Ziel dabei ist es, die resultierenden Koordinaten für Front-End-Schnittstellenelemente zu verwenden und bei Bedarf zu speichern und zu importieren. Die Funktion der Listenpositionen 0 und 4 in[(x1,y1), (x5,y5), 0, 4] soll die Schnittstelle zum Gruppieren von Koordinaten für die spätere Verwendung in Zeichenbereichsobjekten aktivieren. Die Methode sollte möglicherweise Tausende von Koordinaten verarbeiten können.

Vielen Dank im Voraus für jede Hilfe. Ich bin natürlich bereit, die Phrasierung / Informationen, die ich angegeben habe, zu verbessern und / oder Beispielcode hinzuzufügen, wenn unklar ist, wonach ich in irgendeiner Weise frage. Ich bin noch ziemlich neu darin! :)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage