我寫了這個函式來找到兩點之間的距離。現在我的下一個任務是撰寫一個函式,它接收一個點串列,這些點是元組,并通過使用距離函式來計算總距離來計算每對點的距離,但我被卡住了,我不知道該怎么走請問有什么幫助嗎?這是第一個功能:
def distance(point1, point2):
dist = math.sqrt((point2[0] - point1[0])** 2 (point2[1] - point1[1])** 2)
return dist
uj5u.com熱心網友回復:
假設您有一個偶數串列以及要計算的每一對:
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 中的第三個引數是一種批處理方式。然后,如果你想讓它成為一個函式:
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
uj5u.com熱心網友回復:
嘗試這個。
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))
uj5u.com熱心網友回復:
您需要sum()每對點之間的距離。獲得對的一種好方法是使用如下所示的生成器函式。pairwise()你也在重新發明輪子來計算兩點之間的距離——因為有一個math.hypot()函式。
下面的代碼顯示了使用它們一起做你想做的事:
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)))
uj5u.com熱心網友回復:
據我了解,您的距離函式需要兩個元組作為引數。因此,對于新函式,您將擁有一個包含以下嵌套元組的串列:
list_points = [((2, 1), (50, 1)), ((30, 1), (30, 5))]
請注意,每個元組包含兩個元組。
如果是這種情況,我將按照以下方式撰寫新函式:
def total_distance(list_distances):
result = [distance(i[0], i[1]) for i in list_distances]
return sum(result)
這里的第二行使用串列推導回圈遍歷串列并將專案映射到您的距離函式。回傳獲得的所有距離的總和
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/438306.html
上一篇:從函式節點jsssh2回傳值
下一篇:浮點函式不回傳浮點值
