2013-07-19 59 views
2

列出我試圖運行此代碼,但它顯示了一個錯誤:類型錯誤:只能串聯列表(不是 「INT」)在python

def shoot(aliens): 

    s=[0]*1000 
    s[0]=0 
    s[1]=1 
    num=len(aliens) 
    b=[[0 for m in range(1000)] for n in range(1000)] 
    for j in xrange(2,num): 
     for i in xrange(0,j): 

       b[j][i]=s[i]+min(int(aliens[j]),f[j-i]) ##Error here 
     s[j]=max(b) 

和錯誤:

Traceback (most recent call last): 
File "module1.py", line 67, in <module> 
print shoot(line) 
File "module1.py", line 26, in shoot 
b[j][i]=s[i]+min(int(aliens[j]),f[j-i]) 
TypeError: can only concatenate list (not "int") to list 

請幫忙!

編輯:增加了更多的代碼。 s,外星人和f是其他陣列。我試圖將結果保存到2維數組中,但它顯示了錯誤。

+5

's','f'和'aliens'是什麼? –

+1

你能解釋一下你想要達到什麼目的嗎? –

+0

此代碼代表射擊外星人的方式?它似乎沒有做任何事情。 – user2357112

回答

1

嘗試:

b=[[0 for m in range(1000)] for n in range(1000)] 
    for j in xrange(2,num): 
     for i in xrange(0,j): 
      b[j][i]=s[j][i]+min(int(aliens[j]),f[j-i]) 

在我看來,像s是一個2D名單(名單列表),因此,你不能執行該操作 S [J] +分(INT(外星人[J])中,f [ジ])

+0

它正在工作,但有沒有其他方式來做到這一點,因爲我不想將1D數組更改爲2D數組。 –

+0

's'不是列表的列表。 – user2357112

+0

@ user2357112,如果它不是列表的列表,那麼它是什麼? –

7
s[j] = max(b) 

不把作爲b整數的2-d陣列和挑最大的一個。 b是列表的列表。 max(b)比較列表並返回比較最高的那個。 (列表比較,通過比較的元素lexicographically完成。)

你想

s[j] = max(max(sublist) for sublist in b) 
+0

哦。它似乎是另一個錯誤,如果它經歷了上述錯誤。謝謝你指出。 –

1

我用下面的Python代碼相同的錯誤:

retList = [] 
    for anItem in aList: 
     if anItem % 2 == 0: 
      retList = retList + anItem 
    return retList 

當我改變我用於連接到附加語句的「+」:

retList = [] 
    for anItem in aList: 
     if anItem % 2 == 0: 
      retList.append(anItem) 
    return retList 

它工作正常。

相關問題