我知道我只能连接相似类型的东西,但我真的很困惑为什么以下是不同类型的。
n = 100
table = [[0]*n for x in range(n)]
array1 = [[0] for i in range(n)]
mini = array1[1] + table[1][1]
我试图让mini存储整数,它是array1 [1]和table [1] [1]的值的结果。但是我得到了这个错误:
TypeError: can only concatenate list (not "float") to list
我必须要有一些简单的东西。当我打印表[1] [1]时我得到0,那么为什么表[1] [1]不被视为0(即0 + 0)?
答案 0 :(得分:5)
table[1]
确实是[0]*1
,[0]
,而table[1][1]
确实是0
。
但 array[1]
为[0]
,这是一个列表
因此,您array1[1] + table[1][1]
的尝试实际上是[0] + 0
要在将来调试此类内容,请打印解释器抱怨的表达式的每个部分:
print(array1[1])
print(table[1][1])
答案 1 :(得分:0)
查看array1
包含的内容:
>>> array1[1]
[0]
这不是一个用零填充的列表,它是一个列有一堆列表的列表,每个列表都包含一个零。
你可能想要这一行:
array1 = [[0] for i in range(n)]
是这样的:
array1 = [0 for i in range(n)]
答案 2 :(得分:0)
table
和array1
都是整数列表的列表(在本例中为0)。但
array1[1]
是
时的整数列表table[1][1]
是一个整数。您可以使用切片解决问题,如下所示:
mini = array1[1] + table[1][1:2]
导致mini
等于
[0, 0]
切片table[1][1:2]
本身就是一个包含单个元素(table[1][1]
)的列表,并且由于允许连接列表,因此它可以正常工作。
答案 3 :(得分:0)
您的变量array1
是一个列表,其中包含range(n)
中每个只有一个元素0的列表。也就是说,array1[1] = [0]
,而不是array1[0] = 0
。这就是类型不匹配的原因。
另外,不要忘记Python是基于0的,而不是基于1的。它不会在这里引起错误,但似乎背叛了你[1]作为列表中第一个插槽的想法,当[0]为时。
答案 4 :(得分:0)
当您打印每个操作数时,您将获得以下输出:
>>> array1[1]
[0]
>>> table[1][1]
0
所以第一个是列表,第二个是单个整数。因此它显然失败了。
因此,您需要使用array1[1][0]
添加整数值,或使用table[1]
来连接列表。
答案 5 :(得分:0)
so why is table[1][1] not treated as just 0 (I.e. 0 + 0)?
是的。但这不是您可以使用array1[1]
添加到+
的内容。这正是错误消息所说的内容。 +
用于将两个list
添加到一起:
[1, 2, 3] + 4 # WRONG: can't concatenate a non-list with a list
[1, 2, 3] + [4] # RIGHT: concatenates the two lists, producing [1, 2, 3, 4]
如果你不是指array1[1]
成为一个列表,而只是一个数字,那么当你构造array1
时,你应该在其中存储数字,而不是列表。您的设置代码会使array1
成为多个值(n
)的列表,每个值都为[0]
,即列表。
那就是说,请记住数组索引以0开头。
(我也不知道你的意思是“array1 [1]的结果和表[1] [1]的平方值”。)