2015-11-05 40 views
1

我有一個簡單的二維列表,包含x,y對。我正在制定一個程序來查找兩組點之間的最短距離。索引和在二維列表上打印正確的值的麻煩python

列表'值'包含所有的距離,我敢肯定他們是正確的距離。

我想打印出創建最小距離的兩點。打印出最小距離顯然是非常容易的,但打印出這兩點卻給我帶來了麻煩。

我需要跟蹤哪些點正在創建哪些距離。

我認爲我可能不得不重新編寫這段代碼,並重新開始,以完成我想要的任務。但是,無論如何,我有什麼來實現這個結果?如果不是,我該怎麼做?我如何跟蹤正在使用的索引?

代碼:

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) 

回答

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. 
+0

這是很好做謝謝 –

+0

如果你有時間,究竟是關鍵在做什麼?當它被拿出時,我們得到一組不同的對。它是否最接近地表明最小值必須來自距離函數?我不確定 –

+0

它說「按距離判斷找到最小組對」。如果你刪除了'key = dist',你會得到「按照升序的數字順序來判斷最小的一組對數」,這將是'([-1,-1],[1,1])''。 –