擅长:python、mysql、java
<p>下面是一个使用Numpy的解决方案:</p>
<pre><code>import numpy as np
data = [ (2,2), (0,5), (8,0), (9,8), (7,14), (13,12), (14,13) ]
d = np.array(data)
d_xy = [np.argsort(d[:, 0])[::-1],
np.argsort(d[:, 1])[::-1]]
idx_xy = [0, 0]
alternator = 0
order = []
for k in range(d.shape[0]):
idx = idx_xy[alternator]
while (d_xy[alternator][idx] in order):
idx += 1
order.append(d_xy[alternator][idx])
alternator = 1 - alternator
idx_xy[alternator] = idx
print(d[order])
</code></pre>
<p>结果:</p>
<pre><code>[[14 13]
[ 7 14]
[13 12]
[ 9 8]
[ 8 0]
[ 0 5]
[ 2 2]]
</code></pre>