Python - 只能连接列表而不能浮动到列表

时间:2012-03-15 00:39:51

标签: python concatenation

我知道我只能连接相似类型的东西,但我真的很困惑为什么以下是不同类型的。

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)?

6 个答案:

答案 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)

tablearray1都是整数列表的列表(在本例中为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]的平方值”。)