2017-07-18 70 views
0

我要創建的列表,其中每個元素是形式的列表: [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,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

你的程序是等價的:

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