Это будет возвращать список, содержащий (евклидово) расстояние между каждыми двумя последовательными точками, введенных в качестве наборов (х, у). Эти фрагменты кода предполагают Python 3.x, поэтому небольшие изменения могут потребоваться, если вы используете Python 2.7. Тэги не совсем понятны.
import math
def distances(lst):
ln = len(lst)
dists = []
if ln >= 2: # if array contains no or only 1 tuple, return []
for index, tup in enumerate(lst[:ln - 1]):
x1, y1 = tup
x2, y2 = lst[index + 1] # gets x and y of next tuple in the array
dists.append(math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2))
return dists
array0 = []
array1 = [(2, 4), (-4, 2)]
array2 = [(5, 2), (-1, 3), (6, -6)]
array3 = [(2, 4), (-4, 2), (10, -5), (9, -2)]
print(distances(array0))
print(distances(array1))
print(distances(array2))
print(distances(array3))
Выход:
[]
[6.324555320336759]
[6.082762530298219, 11.40175425099138]
[6.324555320336759, 15.652475842498529, 3.1622776601683795]
Если вы хотите напечатать расстояния, как вы упомянули:
import math
def distances(lst):
ln = len(lst)
if ln >= 2:
for index, tup in enumerate(lst[:ln - 1]):
x1, y1 = tup
x2, y2 = lst[index + 1]
dist = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
print(lst[index:index + 2], "=", dist)
array = [(5, 2), (-1, 3), (6, -6)]
distances(array)
Выход:
[(5, 2), (-1, 3)] = 6.082762530298219
[(-1, 3), (6, -6)] = 11.40175425099138
Той же функциональность, как и прежде банки быть достигнуто с помощью модуля numpy instea d математики:
import numpy as np
def distances(lst):
ln = len(lst)
dists = []
if ln >= 2:
for index, tup in enumerate(lst[:ln - 1]):
dists.append(np.linalg.norm(lst[index + 1] - tup))
return dists
array0 = np.array([])
array1 = np.array([(2, 4), (-4, 2)])
array2 = np.array([(5, 2), (-1, 3), (6, -6)])
array3 = np.array([(2, 4), (-4, 2), (10, -5), (9, -2)])
print(distances(array0))
print(distances(array1))
print(distances(array2))
print(distances(array3))
Выход:
[]
[6.324555320336759]
[6.0827625302982193, 11.401754250991379]
[6.324555320336759, 15.652475842498529, 3.1622776601683795]
Если вы хотите только расстояние между двумя кортежей содержится в списке:
import math
def distance(lst):
return math.sqrt((lst[1][0] - lst[0][0]) ** 2 + (lst[1][1] - lst[
0][1]) ** 2)
array = [(2, 4), (-4, 2)]
print(distance(array))
Выход:
6.324555320336759
Что именно вы хотите? Вы хотите передать список кортежей и получить расстояние между ними? Как это будет работать? Или просто пройти ровно 2 пары? – ospahiu
вам нужно будет сделать некоторую распаковку кортежа - например. 'Distance (* array [0] + array [1])' для Python <3.5, 'Distance (* array [0], * array [1])' for> = 3.5 – asongtoruin
Например, если мой вход Is array = [ (5, 2), (- 1, 3), (6, -6)], я хочу получить выход [(5, 2), (-1, 3)] = 6.082, [(-1,3) , (6, -6)] = 11,401 – Daniel