如何从一个列表中获取一个值并将其应用于另一列表中的所有值

时间:2019-05-05 00:15:50

标签: python list loops

由于某些原因,我无法找出为什么代码无法正常工作。 我想计算列表中每个值与所有其他值之间的距离。 就像说我从rar [1] =(2927,6312)列表中取出第一个索引 我想知道它与它自身的距离(为0)以及列表中的所有其他值。

这就是为什么我要制作一个循环,在该循环中,只有在动作完成后,第二点与第二点的循环才会改变。最后,我想得到一个列表,其中的子列表包含每个值到另一个值的距离。像这样:

距离= [[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3 ,4]]

其中0是点本身到点本身之间的距离。 1是列表中第一个点与第一个值之间的距离 2是列表中第一个点和第二个值之间的距离。...

非常感谢您。

rar= [(2925, 6597), (2927, 6312), (2934, 6545), (2938, 7412), (2941, 6456)]

templist=[]
distance=[]
for i in range(len(rar)) :
    firstpoint = rar[i]
    for q in range(len(rar):
       secpoint = rar[q]
       zipz = np.array(list(zip(firstpoint,secpoint)))
       nan = round(np.linalg.norm(zipz))
       templist.append(nan)
    distance.append(templist)

1 个答案:

答案 0 :(得分:1)

目前尚不清楚如何计算两个元素之间的距离,但我认为差异的范数应该可以做到。这是一个有关如何执行此操作的小示例,同时使用列表表达式使代码保持简单和最少:

import numpy as np

rar      = [(2925, 6597), (2927, 6312), (2934, 6545), (2938, 7412), (2941, 6456)]
distance = [[round(np.linalg.norm(np.array(a)-np.array(b))) for b in rar] for a in rar]
print(distance)

输出:

[[0.0, 285.0, 53.0, 815.0, 142.0],
 [285.0, 0.0, 233.0, 1100.0, 145.0],
 [53.0, 233.0, 0.0, 867.0, 89.0],
 [815.0, 1100.0, 867.0, 0.0, 956.0],
 [142.0, 145.0, 89.0, 956.0, 0.0]]