【发布时间】:2018-08-05 09:50:53
【问题描述】:
我正在尝试编写一个 Python 函数(不使用模块),它将遍历坐标列表并找到两个后续点之间的欧几里德距离(例如,点 a 和 b、b 和c、c 和 d 等)。经过几个小时的搜索,我遇到了this post,我认为它解决了我的问题,所以我写了这个:
myList = [[2, 3], [3,4], [4,5], [5,6], [6,7]]
def distance(pointOne,pointTwo):
eucDist = ((pointOne[0] - pointTwo[0])**2 + (pointOne[1] - pointTwo[1])**2)**0.5
return eucDist
def totalDistance(inputPoints):
dist = []
for item in inputPoints[1:]:
coordDist = distance(inputPoints[0],item)
dist.append(coordDist)
return sum(dist)
print totalDistance(myList)
但是,这会检索第一个点与其他每个点之间的距离。我一直在试图弄清楚如何为序列中的下一个点定义一个变量,但我对 Python 还是很陌生,只是不太明白如何到达那里。我目前正在编写这样的totalDistance 函数:
def totalDistance(inputPoints):
dist = []
for item in inputPoints:
pOne = item
pTwo =
coordDist = distance(pOne,pTwo)
dist.append(coordDist)
return sum(dist)
但不知道如何定义 pTwo。
【问题讨论】:
-
关键是循环点对:
for p1, p2 in zip(points[:-1], points[1:]): ...。 -
@RaymondHettinger 嗯,我很惊讶。你真的更喜欢
zip(points, points[1:])吗? -
@StefanPochmann 不,我更喜欢你的版本。也就是说,将两个长度相等的列表压缩在一起更容易解释。
标签: python python-2.7 for-loop iteration point