首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点到点列表之间的距离

点到点列表之间的距离
EN

Stack Overflow用户
提问于 2019-06-25 03:30:05
回答 6查看 3.4K关注 0票数 4

我试图计算从点p到列表s中的每个点的距离。

代码语言:javascript
复制
import math
s= [(1,4),(4,2),(6,3)]
p= (3,7)

p0,p1=p
dist=[]

for s0,s1 in s:
    dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
    dist= dist+1
    print(dist)
代码语言:javascript
复制
TypeError                                 Traceback (most recent call last)
<ipython-input-7-77e000c3374a> in <module>
      3 dist=[]
      4 for s0,s1 in s:
----> 5    dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
      6 
      7 

TypeError: 'int' object is not subscriptable

我看到访问位置已经停止,因为p0,p1ints。但是在这个场景中,我不知道如何解决这个问题。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-06-25 03:34:58

即使您已经将点分隔到x, y中,但您还是意外地使用了数据索引。此外,您正在覆盖列表,而不是保存数据。此外,距离公式是不正确的,它应该是点之间的减法,而不是加法。试试这个:

代码语言:javascript
复制
import math
s= [(1,4),(4,2),(6,3)]
p= (3,7)

p0,p1=p
dist=[]

for s0,s1 in s:
    dist_=math.sqrt((p0 - s0)**2 + (p1 - s1)**2) #Edit this line to [0]s and [1]s
    dist_= dist_+1 #Also change name and/or delete
#    print(dist)
    dist.append(dist_) #Save data to list
票数 3
EN

Stack Overflow用户

发布于 2019-06-25 03:34:36

dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)

在这里,您正在索引整数。

此外,您在计算时犯了一个错误。它应该是:

dist=math.sqrt((p0 - s0)**2 + (p1 - s1)**2)

票数 2
EN

Stack Overflow用户

发布于 2019-06-25 03:56:04

如果想要的是一个距离列表,那么可以在一行代码中完成,其中包含一个列表理解:

代码语言:javascript
复制
import math
import pprint

s = [(1,2),(3,4),(-1,1),(6,-7),(0, 6),(-5,-8),(-1,-1),(6,0),(1,-1)]
p = (3,-4)

dists = [math.sqrt((p[0]-s0)**2 + (p[1]-s1)**2) for s0, s1 in s]

pprint.pprint(dists)

这里的另一件事是,我已经从操作系统代码中删除了dist = dist + 1。我不认为作为correct...why会使每个计算的距离增加1?

结果:

代码语言:javascript
复制
[6.324555320336759,
 8.0,
 6.4031242374328485,
 4.242640687119285,
 10.44030650891055,
 8.94427190999916,
 5.0,
 5.0,
 3.605551275463989]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56746440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档