11

我试图运行这段代码,但它显示了一个错误:

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、aliens 和 f 是其他数组。我试图将结果保存到二维数组,但它显示了该错误。

4

4 回答 4

10
s[j] = max(b)

b视为整数的二维数组并选择最大的一个。b是列表的列表。max(b)比较列表并返回比较最高的列表。(列表比较是通过按字典顺序比较元素来完成的。)

你要

s[j] = max(max(sublist) for sublist in b)
于 2013-07-19T21:05:25.477 回答
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

它工作得很好。

于 2015-02-26T11:22:26.600 回答
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])

在我看来,喜欢的是一个 2D 列表(列表的列表),因此,您无法执行该操作。

s[j] + min(int(aliens[j]),f[j-i])
于 2013-07-19T20:58:02.423 回答
0

我在函数中遇到了这个错误,因为填充的全局变量与未使用的局部变量的冲突:错误地,我在函数中不知道但称为字符串类型的全局变量的数字局部变量中添加了一些东西。

将其缩减为一个小而可重复的示例:

def test():
    for j in range(2):
        print(j)
        print(i + 1) # error here, string type + 1!!
    return

i = ['a']
test()

这将输出:

<ipython-input-281-10d295524223> in test()
      2     for j in range(2):
      3         print(j)
----> 4         print(i + 1)
      5     return
      6 

TypeError: can only concatenate list (not "int") to list

全局变量 i 是字符串'a'。您不能添加+ 1到字符串。

正确的功能当然是:

def test():
    for i in range(2):
        print(i + 1)
    return
于 2021-10-02T21:51:48.323 回答