2016-09-28 29 views
0

我的代碼的相關部分在這裏 *編輯:第一次沒有包含外部循環。python列表的問題,元素被設置爲值我不想要

for i in range(numAttributes): 
    for w in range(numFeatures): 
     if X[i][w]!=0: 
      print ("Setting nFeat[",y[i],"][",w,"]") 
      self._Nfeat[y[i]][w]=1  
      print self._Nfeat[3][numFeatures-1] 
      if self._Nfeat[3][numFeatures-1]!=0: 
       print("y[i] is: ", y[i]," and w is: ", w) 
       sys.exit() 

基本上self._Nfeat[3][numFeatures-1]被設置爲1時,它不應該是。聲明中的print聲明和最終的if聲明全部用於調試。

最後的4件事輸出是:

0 
setting nFeat[1][265676] 
1 
y[i] is 1 and w is 26576 

我也放在其他地方其他如果self._Nfeat[3][numFeatures-1]!=0檢查並確定它肯定是在當前位置前右發生。

這讓我非常困惑,因爲self._Nfeat[3][numFeatures-1]似乎在它不應該改變時。

列表self._Nfeat在INIT與初始化:

self._Nfeat=[] 

在方法它,然後用

self._Nfeat=[[0]*numFeatures]*numClasses 

重新初始化的開始沒有別的地方的代碼它完全處理這個列表。

我是新來的Python並希望任何幫助非常

+0

您需要更具體一點,因爲您的問題並不清楚。顯然'y [i]'是'1',但你檢查'nFeat [3]'而不是'nFeat [1]'。這是什麼原因? – Selcuk

+0

我知道nFeat [3] [265676]不應該設置爲1。但是在代碼中這一點正在發生。當nFeat [1]被引用時,這部分的混亂來自於它被設置爲1。 – user3692508

+0

您很可能會克隆相同的列表以生成您的嵌套列表。在這種情況下,所有列表都將指向相同的內存位置。請張貼您如何首先實例化'self._Nfeat'。 – Selcuk

回答

0

問題是與您的實例:

self._Nfeat=[[0]*numFeatures]*numClasses 

這將複製(不克隆!)相同的列表numClasses倍,這將導致在你遇到的錯誤。將其改爲如下所示:

self._Nfeat = [[0] * numFeatures for _ in range(numClasses)] 
相關問題