所以我正在努力從字典中的資料中找到兩個坐標的最近歐幾里得距離。
首先,我已經弄清楚如何使用以下方法計算兩個笛卡爾坐標 (x,y) 之間的距離:
from math import sqrt
def distance(loc1_coordinates, loc2_coordinates):
point1x, point1y = loc1_coordinates
point2x, point2y = loc2_coordinates
Distance = sqrt((point1x-point2x)**2 (point1y-point2y)**2)
return "The distance between this two points is", str(round(Distance, 14)) " units"
print(distance([0,0],[3,4])) # distance should be 5.0
如何根據我之前的函式創建一個新函式,以便得到以下結果?
cities = {'A':[5,21], 'B':[43,76], 'C':[56,19], 'D':[21,37], 'E':[76,23], 'F':[45,56], 'G':[23,13]}
print(closest_destination('A', cities)) # should be 'G'
更新:我試圖在輸入城市的計算串列中找到最小的距離:例如:比較 A->B、A->C、A->D,...并選擇距離最近的那個
uj5u.com熱心網友回復:
首先,更改您的函式以回傳數字值而不是字串(通常您應該讓函式回傳值,以便您在代碼中使用它們做其他有用的事情,而不是將它們轉換為英語表示):
from math import sqrt
def distance(loc1_coordinates, loc2_coordinates):
point1x, point1y = loc1_coordinates
point2x, point2y = loc2_coordinates
return sqrt((point1x-point2x)**2 (point1y-point2y)**2)
其中一個有用的東西,你可以用這個功能做的是把它作為一個key在min功能找到的最小距離:
def closest_destination(city: str, cities: dict) -> str:
"""Given a city in a {city: coord} dict, return closest other city."""
other_cities = {k: v for k, v in cities.items() if k != city}
return min(other_cities, key=lambda o: distance(cities[o], cities[city]))
進而:
cities = {'A':[5,21], 'B':[43,76], 'C':[56,19], 'D':[21,37], 'E':[76,23], 'F':[45,56], 'G':[23,13]}
print(closest_destination('A', cities)) # prints 'G'
uj5u.com熱心網友回復:
單程方法是使用 的關鍵引數min:
def closest_destination(source, locations):
source_location = locations[source]
return min(locations, key=lambda loc: (loc == source, distance(source_location, locations[loc])))
cities = {'A': [5, 21], 'B': [43, 76], 'C': [56, 19], 'D': [21, 37], 'E': [76, 23], 'F': [45, 56], 'G': [23, 13]}
print(closest_destination('A', cities)) # should be 'G'
輸出
G
函式思想:
lambda loc: (loc == source, distance(source_location, locations[loc]))
將每個城市鍵映射到一個元組,如果它等于源,則第一個值為 1,因此它將始終排在最后。然后你通過距離打破聯系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364702.html
上一篇:有沒有辦法將python終端中的字體更改為comicsans?編輯:在回復中
下一篇:如何從kivy按鈕中獲取文本?
