Нахождения расстояния между точками python
Есть список с точками, и формула по которой необходимо найти расстояния между каждой точкой в списке. Список выглядит так:
[(0, 1), (2, 4), (5, 1), (5, 5), (7, 2)]
В круглых скобках координаты точки x, y.
Формула:
((point_2[0] - point_1[0]) ** 2 + (point_2[1] - point_1[1]) ** 2) ** 0.5
Не получается написать красивую функцию или однострочник, чтобы в итоге получился список из расстояний между точками. Т.е ['расстояние между (0,1) и (2,4)', 'расстояние между (2,4) и (5,1)' и т.д ]
Ответы (3 шт):
Можете попробовать вот так:
def distance(point_1, point_2):
return ((point_2[0] - point_1[0]) ** 2 + (point_2[1] - point_1[1]) ** 2) ** 0.5
list_point = [(0, 1), (2, 4), (5, 1), (5, 5), (7, 2)]
def get_list_distance(list_point):
return [distance(item, list_point[index])
for index, item in enumerate(list_point, start=-len(list_point) + 1)]
distance_list = get_list_distance(list_point)
print(distance_list)
Вывод
[3.605551275463989, 4.242640687119285, 4.0, 3.605551275463989, 7.0710678118654755]
math.hypot вычисляет расстояния, zip формирует пары. Можно превратить в однострочник:
import math
def dist(p1, p2):
return math.hypot(p2[0] - p1[0], p2[1] - p1[1])
def dists(points):
return [dist(p1, p2) for p1, p2 in zip(points[:-1], points[1:])]
print(dists([(0, 1), (2, 4), (5, 1), (5, 5), (7, 2)]))
Мне кажется, что если речь идет о расстоянии только между соседними точками, то все намного проще:
arr=[(0, 1), (2, 4), (5, 1), (5, 5), (7, 2)]
lst=[(((arr[i][0]-arr[i+1][0])**2+(arr[i][1]-arr[i+1][1])**2)**0.5) for i in range(len(arr)-1) ]
print(lst)
Результат:
[3.605551275463989, 4.242640687119285, 4.0, 3.605551275463989]
В точном соответствии с заданием: и результат - список, и решение - однострочник.