[英]Calculating total distance between points
我寫了這個 function 找到兩點之間的距離。 現在我的下一個任務是編寫一個 function,它接受一個點列表,這些點是元組,並通過使用距離 function 計算總距離來找到每對點的距離,我被卡住了我不知道如何 go關於它有什么幫助嗎? 這是第一個 function:
def distance(point1, point2):
dist = math.sqrt((point2[0] - point1[0])** 2 + (point2[1] - point1[1])** 2)
return dist
假設您有一個偶數列表和您要計算的每一對:
list_points = [(2,1),(50,1), (30,1), (30,5)]
for i in range(0,len(list_points),2):
pair = list_points[i:i+2]
dist(pair[0], pair[1])
range 中的第三個參數是一種批處理方式。 那么如果你想讓它成為 function:
def compute_distance(list_points):
"""compute distance of points give a list of tuples"""
computed_list = []
for i in range(0,len(list_points),2):
pair = list_points[i:i+2]
computed_list.append(dist(pair[0], pair[1]))
return computed_list
嘗試這個。
import math
def calc_total_distance(point_list):
total_dist = 0
for i in range(len(point_list)-1):
dist = math.sqrt((point_list[i][0] - point_list[i+1][0])** 2 + (point_list[i][1] - point_list[i+1][1])** 2)
total_dist += dist
return(total_dist)
point_list = [(1,2), (2,2), (2,10)]
print(calc_total_distance(point_list))
據我了解,您的距離 function 以兩個元組作為參數。 因此,對於新的 function,您將有一個包含此類嵌套元組的列表:
list_points = [((2, 1), (50, 1)), ((30, 1), (30, 5))]
請注意,每個元組包含兩個元組。
如果是這種情況,下面是我將如何編寫新的 function:
def total_distance(list_distances):
result = [distance(i[0], i[1]) for i in list_distances]
return sum(result)
這里的第二行使用列表理解循環遍歷列表和 map 項目到你的距離 function。返回所有獲得的距離之和
您需要對每對點之間的距離sum()
。 獲得配對的一種好方法是使用生成器 function ,如下所示的名為 pairwise pairwise()
的生成器。 關於計算兩點之間的距離,您也在重新發明輪子 — 因為有一個math.hypot()
function。
下面的代碼顯示了一起使用它們來做你想做的事情:
import math
def pairwise(iterable):
"""s -> (s0,s1), (s1,s2), (s2, s3), ..."""
a, b = iter(iterable), iter(iterable)
next(b, None)
return zip(a, b)
def distance(point1, point2):
return math.hypot(point2[0]-point1[0], point2[1]-point1[1])
if __name__ == '__main__':
points = [(1,2), (2,2), (2,10)]
print(f'total distance:', sum(distance(a, b) for a,b in pairwise(points)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.