我必须创建一个列表,其中每个元素都是一个表单列表: 并[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循环的结果?
答案 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)]