2013-07-19 55 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 

它工作正常。

相关问题