我有一个包含x,y对的简单二维列表。我正在制作一个程序来找到它们之间距离最短的两组点。
列表'values'包含所有距离,我很确定它们是正确的距离。
我想打印出创建最小距离的两个点。打印出最小距离显然非常容易,但打印出这两点是给我带来麻烦的。
我需要跟踪哪些点创建了哪些距离。
我认为我可能不得不重新编写此代码并重新开始以实现我想要的目标。但是,无论如何,用我所拥有的东西来实现这个结果?如果没有,我该怎么做?如何跟踪正在使用的索引?
代码:
multiD = [[1,3],
[-1,-1],
[1,1],
[2,0.5],
[2,-1],
[3,3],
[4,2],
[4,-0.5]]
def distance(x1, y1, x2, y2):
distance = ( (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1))) ** 0.5)
return distance
values = []
for [x1,y1] in multiD:
for [x2,y2] in multiD:
if [x1,y1] != [x2,y2]:
diff = distance(x1,y1,x2,y2)
values.append(diff)
答案 0 :(得分:2)
from itertools import combinations
points = [
[ 1, 3], [-1, -1], [ 1, 1],
[ 2, 0.5], [ 2, -1], [ 3, 3],
[ 4, 2], [ 4, -0.5]
]
def dist(pair):
(x1, y1), (x2, y2) = pair
return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
def main():
pairs = combinations(points, 2)
closest = min(pairs, key=dist)
print("The closest pair is {} at {}.".format(closest, dist(closest)))
if __name__=="__main_":
main()
产生
The closest pair is ([1, 1], [2, 0.5]) at 1.118033988749895.