2015-11-15 70 views
-2

這是我的代碼:蟒:對於i在範圍麻煩

for i in range(self.inputCount, len(self.neurons)): 
     currNode=self.neurons[i] 
     for k in range(len(currNode.inNeuron)): 
      print 'len(currNode.inNeuron) =', len(currNode.inNeuron) 
      print 'range(len(currNode.inNeuron)) =', range(len(currNode.inNeuron)) 
      print 'k =', k 
      if currNode.inNeuron[k] == editNode: 
       currNode.inNeuron.pop(k) 

出於某種原因,每當運行此和len(currNode.inNeuron)是1,並且範圍爲[0],k是1。我在這種情況下,只需要k爲零。這裏是打印輸出的樣本

range(len(currNode.inNeuron)) = [0] 
k = 0 
len(currNode.inNeuron) = 1 
range(len(currNode.inNeuron)) = [0] 
k = 0 
len(currNode.inNeuron) = 2 
range(len(currNode.inNeuron)) = [0, 1] 
k = 0 
len(currNode.inNeuron) = 1 
range(len(currNode.inNeuron)) = [0] 
k = 1 
Traceback (most recent call last): 
    File "neuralnet.py", line 99, in <module> 
    if __name__=="__main__":main() 
    File "neuralnet.py", line 95, in main 
    net1.randomizeNet(5) 
    File "neuralnet.py", line 84, in randomizeNet 
    self.eraseNode() 
    File "neuralnet.py", line 52, in eraseNode 
    if currNode.inNeuron[k] == editNode: 

有關如何解決此問題的任何想法?

+0

*嘆*,什麼是錯誤? –

+0

不會更改'for'中使用的元素 - 您從'currNode.inNeuron.pop(k)'中獲取元素,但是對於範圍內的k(len(currNode.inNeuron))''不知道它。 – furas

+1

你的循環在範圍內使用'k(len(currNode.inNeuron)):'。範圍函數'len(currNode.inNeuron)'的參數在循環開始時計算。因此,當'currNode.inNeuron'中有2個項目時,即使在循環中更改'currNode.inNeuron'中的項目,循環也會運行兩次。 –

回答

0

也許試試這個,

for i in range(self.inputCount, len(self.neurons)): 
    currNode=self.neurons[i] 
    for k in range(len(currNode.inNeuron)): 
     print 'len(currNode.inNeuron) =', len(currNode.inNeuron) 
     print 'range(len(currNode.inNeuron)) =', range(len(currNode.inNeuron)) 
     if(len(currNode.inNeuron == 1 && range(len(currNode.inNeuron == 0))) 
      print 'k = 0' 
     else 
      print 'k =', k 
     if currNode.inNeuron[k] == editNode: 
      currNode.inNeuron.pop(k)