[英]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.