2014-04-19 31 views
-1

我面對這個奇怪的錯誤,並在其上浪費了1小時,但不能想出解釋錯誤而計算math.sqrt



    import math 

    ipd={1:[2,3],2:[1],3:[1],4:[5,6,7],5:[4,6],6:[4,5],7:[4]} 
    gkeys = [k for k in ipd.iterkeys()] 
    key_map = {} 

    for x in range(len(gkeys)): 
     key_map[x] = gkeys[x] 

    val = len(gkeys) 
    #adj matrix... 
    W = [[0.0]*val]*val 
    print W 
    for i in range(len(gkeys)): 
     for j in range(len(gkeys)): 
      #if i and j has edge... 
      if key_map[j] in ipd[key_map[i]]: 
       deg1 = len(ipd[key_map[j]]) 
       deg2 = len(ipd[key_map[i]])  
       v = 1.0/math.sqrt(deg1*deg2) 
       W[i][j] = v 
       print i,j,deg1,deg2,W[i][j], W[j][i] 

這裏是整個問題

對於i = 3和j = 5第一個W [i] [j]是0.4248 .. 但是對於i = 5,j = 3 W [j] [i]給出0.5,這是如何實現的。

謝謝!

+0

您遇到的問題與如何創建'W'做。它的項目都是對同一個列表的引用,而不是幾個獨立的列表。 – Blckknght

回答

0
W = [[0.0]*val]*val 

上面給你的完全相同的列表val副本。 試試這個:

a = [[0] * 4] * 4 
print a 
a[0][0] = 99 
print a 

輸出:

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
[[99, 0, 0, 0], [99, 0, 0, 0], [99, 0, 0, 0], [99, 0, 0, 0]]