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

标签 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)

最佳答案

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

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]]

关于python - 如何从一个列表中获取一个值并将其应用于另一列表中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987854/

相关文章:

python - Flaskext 形式错误

python - Django - 表单与模型表单,编辑 model.textField,并获取对象的 pk?

Java:如何创建一个接受第一个元素的列表的列表 cons

python - 如何从列表中查找对象

python - pandas 嵌套迭代的矢量化解决方案

loops - 双循环函数的时间复合体

Python 在用户生成的整数列表、While 循环和 Try-Except 中防止重复

python - matplotlib - 基于附加数据的绘图的多个标记

Java:如何将 List<T> 中的对象添加到 Map(键:Enum,值 List<T>)

python - 使用 Python 构建 KML