2013-11-20 202 views
2

我是一個Python初學者,我在迭代列表時遇到了問題。這是一張我遇到的麻煩代碼:Python - TypeError:'int'對象沒有屬性'__getitem__'

for x in list(xrange(instance.nbw)): 
     sddpbw.append(choice(sddpfw)) 
print sddpbw 

for t in reversed(list(xrange(instance.T))): 

    if t>0: 
     for u in sddpbw: 
      # for n in list(xrange(1,instance.NUMPATHS+1,passo)): 
      for n in pairs[t][u-1]: 
       if n != u: 
        for p in instance.HP: 
         x[n-1][t-1][p-1]=x[u-1][t-1][p-1] 

我有一個以前的列表(sddpfw),並希望chosse從它的一些元素,並創建另一個列表(sddpbw)。 出口是:

[4, 2] 
Traceback (most recent call last): 
    File "PDDE.py", line 179, in <module> 
     x[n-1][t-1][p-1]=x[u-1][t-1][p-1] 
TypeError: 'int' object has no attribute '__getitem__' 

但如果我評論說,創建了變量sddpbw的部分和碼的手動創建它,它工作正常:

# for x in list(xrange(instance.nbw)): 
    # sddpbw.append(choice(sddpfw)) 
sddpbw=[4, 2] 
print sddpbw 

我不能弄清楚爲什麼發生這種情況。

+0

您認爲''''''應該在第二個for循環中怎麼辦? – rlms

+3

爲什麼'for x in list(xrange(...))'?當xrange(...)中的x能夠正常工作嗎?更不用說'for x in reverse(list(xrange(...))):'這可以通過'for x in xrange(instance.T - 1,-1,-1):'來處理。 –

+0

的確,'list(xrange(x))'省去了'range'範圍內使用'xrange'的內存節省。 – rlms

回答

2

您重置了您的x變量這一行。當循環完成時,您會得到x作爲某個整數。

for x in list(xrange(instance.nbw)): 
    sddpbw.append(choice(sddpfw)) 

例如

>>> c = [1,2,3] 
>>> c 
[1, 2, 3] 
>>> for c in xrange(1, 3): 
...  print(c) 
... 
1 
2 
>>> c 
2 

您需要更改此x以別的名稱。

for _ in list(xrange(instance.nbw)): 
    sddpbw.append(choice(sddpfw)) 
+0

謝謝。這是問題所在 – saulo

相關問題