从字典中的前一个元素中减去列表中的每个元素



我有一个字典,它有一个2D列表(列表的列表)。这个二维列表包含一个粒子的x和y坐标[x,y]。每当粒子移动时,它的新坐标就会被添加到字典中的2D列表中。我想计算每个位置之间的距离,并将结果附加到另一个列表(可以只是一个没有字典的普通列表)。我想要的是如下内容:

dist1 = sqrt((x1-x0)^2 + (y1-y0)^2)
dist2 = sqrt((x2-x1)^2 + (y2-y1)^2)
.....
distN = sqrt((xN-xN-1)^2 + (yN-yN-1)^2)

但是我在访问字典中的列表元素时遇到问题。我有一个很长的2D列表,但你可以使用下面的例子给我一些建议。

c = {"coordinates":[[1,2],[3,4],[5,6],[7,8]]}
for k, dk in c.items():
for x in dk:
print(x[0], x[1])

我可以在一个循环中访问dk中的一个元素,但如何获得前一个?应该有一个很好的方法,但我只是不知道。

任何帮助都将不胜感激。

使用for循环(可能不是最有效的解决方案):

import numpy as np
c = {"coordinates":[[1,2],[3,4],[5,6],[7,8]]}
coordinates = np.array(c['coordinates'])
distances = []
for i in range(1, len(coordinates)):
distances.append(np.linalg.norm(coordinates[i-1] - coordinates[i]))
print(distances)
# [2.8284271247461903, 2.8284271247461903, 2.8284271247461903]

我也使用numpy和它的linalg.norm函数来计算距离(如何用numpy计算欧几里得距离?),但你当然可以使用你自己的函数或计算,如果你想要的话。

我尝试了这个,它也工作:

c = {"coordinates":[[1,2],[3,4],[15,6],[7,8]]}
l1 = []
for k, dk in c.items():
for x in dk:
l1.append(x)
print(l1)
dist = [math.sqrt((p1[0]-p0[0])**2 + (p1[1]-p0[1])**2) for p1,p0 in zip(l1,l1[1:]

正如其他人在这个问题中建议的那样,获得l1的更好方法是使用以下命令:

l1 = c["coordinates"]
dist = [math.sqrt((p1[0]-p0[0])**2 + (p1[1]-p0[1])**2) for p1,p0 in zip(l1,l1[1:]

相关内容

  • 没有找到相关文章

最新更新