用于创建距离列表的列表理解

时间:2017-07-18 18:53:35

标签: python-3.x list-comprehension

我必须创建一个列表,其中每个元素都是一个表单列表: 并[d,I,J]

其中i,j是两点的索引,d是它们之间的欧几里德距离。由于(i,j)之间的距离与(j,i)之间的距离相同,我这样做

dist=[]   
for i in range(n):
        for j in range(i,n):
            dist.append([math.hypot(x[i]-x[j],y[i]-y[j]),i,j])

这给了我想要的东西:

[[0.0,0,0],[0.0,1,1],[1.0,0,2],[1.0,0,3],[1.0,1,2],[1.0,2,0] ],[1.0,2,1],[1.0,3,0],[1.4142135623730951,0,1],[1.4142135623730951,1,0]]

我尝试使用列表理解但列出了列表列表:

dist = [[[math.hypot(x[i]-x[j],y[i]-y[j]),i,j] for j in range(i,n)] for i in range(n)]

但它完全创造了一些东西: [[[0.0,0,0],[1.0,0,1],[1.0,0,2],[1.4142135623730951,0,3]],[[0.0,1,1],[1.4142135623730951,1,2 ],[1.0,1,3],[[0.0,2,2],[1.0,2,3]],[[0.0,3,3]]]

是否有一些紧凑列表理解方法实现了显式for循环的结果?

1 个答案:

答案 0 :(得分:0)

您的程序相当于:

dist = [[math.hypot(x[i] - x[j], y[i] - y[j]), i, j] for i in range(n) for j in range(i, n)]