擅长:python、mysql、java
<p>我确信有一种更具python风格的方法(可能使用numpy),但这里有一种相当简单的方法</p>
<pre><code>import math
my_list1 = [['a', (7,1)], ['b', (20,7)], ['c', (0,0)], ['d', (7,0)]]
my_list2 = [['o', (12,6)]]
# Return distance between 2 points
def distance(a, b):
return math.sqrt((a[1][0]-b[1][0])**2 + (a[1][1]-b[1][1])**2)
for i in range(len(my_list1)):
# Make a new list of tuples
d = [(index, distance(point, my_list2[-1])) for index,point in enumerate(my_list1)]
# Get the tuple with greatest distance
farthest = max(d, key=lambda x:x[1])[0]
# Add to one list, delete from other
my_list2.append(my_list1[farthest])
del my_list1[farthest]
print(my_list2)
</code></pre>
<p>输出:</p>
<pre class="lang-none prettyprint-override"><code>[['o', (12, 6)], ['c', (0, 0)], ['b', (20, 7)], ['d', (7, 0)], ['a', (7, 1)]]
</code></pre>