Нахождения расстояния между точками 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

Ну или http://900igr.net/prezentatsii/algebra/Prostejshie-zadachi-v-koordinatakh/007-4.-Rasstojanie-mezhdu-dvumja-tochkami.html

Не получается написать красивую функцию или однострочник, чтобы в итоге получился список из расстояний между точками. Т.е ['расстояние между (0,1) и (2,4)', 'расстояние между (2,4) и (5,1)' и т.д ]


Ответы (3 шт):

Автор решения: Bol4onok

Можете попробовать вот так:

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]
→ Ссылка
Автор решения: Stanislav Volodarskiy

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)]))
→ Ссылка
Автор решения: passant

Мне кажется, что если речь идет о расстоянии только между соседними точками, то все намного проще:

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]

В точном соответствии с заданием: и результат - список, и решение - однострочник.

→ Ссылка