我试图计算从点p到列表s中的每个点的距离。
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)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,p1是ints。但是在这个场景中,我不知道如何解决这个问题。
发布于 2019-06-25 03:34:58
即使您已经将点分隔到x, y中,但您还是意外地使用了数据索引。此外,您正在覆盖列表,而不是保存数据。此外,距离公式是不正确的,它应该是点之间的减法,而不是加法。试试这个:
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发布于 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)
发布于 2019-06-25 03:56:04
如果想要的是一个距离列表,那么可以在一行代码中完成,其中包含一个列表理解:
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?
结果:
[6.324555320336759,
8.0,
6.4031242374328485,
4.242640687119285,
10.44030650891055,
8.94427190999916,
5.0,
5.0,
3.605551275463989]https://stackoverflow.com/questions/56746440
复制相似问题