这将返回一个包含输入为元组(X,Y)每两个连续点之间的(欧几里得)距离的列表。这些代码片段假设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
你需要做一些元组拆包 - 例如对于Python <3.5,'Distance(* array [0],* array [1])',for> = 3.5 – asongtoruin
例如,如果我的输入是array = [[array] [array] (5,2),( - 1,3),(6,-6)],我想得到输出[(5,2),(-1,3)] = 6.082,[(-1,3) ,(6,-6)] = 11.401 – Daniel