import numpy as np
from scipy.spatial.distance import cdist
coordinates = [np.array([[300, 2300],
[670, 2360],
[400, 2300]]),
np.array([[1500, 1960],
[1620, 2200],
[1505, 1975]]),
np.array([[980, 1965],
[1060, 2240],
[1100, 2250],
[980, 1975]]),
np.array([[565, 1940],
[680, 2180],
[570, 1945]])]
lasts = [arr[-1] for arr in coordinates]
firsts = [arr[0] for arr in coordinates]
res, coordinates = [coordinates[0]], coordinates[1:]
while coordinates:
lasts = res[-1][-1].reshape(1, -1)
distances = cdist(lasts, firsts).flatten()
nearest = np.argmin(distances)
res.append(coordinates.pop(nearest))
firsts.pop(nearest)
print(res)
aW1wb3J0IG51bXB5IGFzIG5wCmZyb20gc2NpcHkuc3BhdGlhbC5kaXN0YW5jZSBpbXBvcnQgY2Rpc3QKCmNvb3JkaW5hdGVzID0gW25wLmFycmF5KFtbMzAwLCAyMzAwXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFs2NzAsIDIzNjBdLAogICAgICAgICAgICAgICAgICAgICAgICAgWzQwMCwgMjMwMF1dKSwKICAgICAgICAgICAgICAgbnAuYXJyYXkoW1sxNTAwLCAxOTYwXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsxNjIwLCAyMjAwXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTA1LCAxOTc1XV0pLAogICAgICAgICAgICAgICBucC5hcnJheShbWzk4MCwgMTk2NV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbMTA2MCwgMjI0MF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbMTEwMCwgMjI1MF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbOTgwLCAxOTc1XV0pLAogICAgICAgICAgICAgICBucC5hcnJheShbWzU2NSwgMTk0MF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbNjgwLCAyMTgwXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFs1NzAsIDE5NDVdXSldCgoKbGFzdHMgPSBbYXJyWy0xXSBmb3IgYXJyIGluIGNvb3JkaW5hdGVzXQpmaXJzdHMgPSBbYXJyWzBdIGZvciBhcnIgaW4gY29vcmRpbmF0ZXNdCgpyZXMsIGNvb3JkaW5hdGVzID0gW2Nvb3JkaW5hdGVzWzBdXSwgY29vcmRpbmF0ZXNbMTpdCgp3aGlsZSBjb29yZGluYXRlczoKICAgIGxhc3RzID0gcmVzWy0xXVstMV0ucmVzaGFwZSgxLCAtMSkKICAgIGRpc3RhbmNlcyA9IGNkaXN0KGxhc3RzLCBmaXJzdHMpLmZsYXR0ZW4oKQogICAgbmVhcmVzdCA9IG5wLmFyZ21pbihkaXN0YW5jZXMpCiAgICByZXMuYXBwZW5kKGNvb3JkaW5hdGVzLnBvcChuZWFyZXN0KSkKICAgIGZpcnN0cy5wb3AobmVhcmVzdCkKCgpwcmludChyZXMpCg==
[array([[ 300, 2300],
[ 670, 2360],
[ 400, 2300]]), array([[1500, 1960],
[1620, 2200],
[1505, 1975]]), array([[ 980, 1965],
[1060, 2240],
[1100, 2250],
[ 980, 1975]]), array([[ 565, 1940],
[ 680, 2180],
[ 570, 1945]])]