2015-11-15 33 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)