[] []在Python中给出了一个SyntaxError

时间:2011-05-03 09:27:39

标签: python

我编写了这段代码,但它在第一行显示错误SyntaxError: invalid syntax

a =[][]
for i in range(3):
    for j in range(3):
        a[i][j] = i+j

4 个答案:

答案 0 :(得分:6)

[][]是无效的语法。 Python中没有真正的多维数组,只有列表列表。此外,列表不会自动扩展到您向其投掷的任何索引。您必须使用例如append方法手动展开它们。

如果你想要一个“二维数组”,首先要创建顶级列表:

a = []

然后在循环中添加子列表

for i in range(3):
    row = []
    a.append(row)
    for j in range(3):
        row.append(i+j)

有更简洁的方法来初始化这样的列表结构,但这是一种更接近代码的方式。

如果要快速将列表初始化为特定大小,可以在列表中使用*运算符:

>>> [0] * 5
[0, 0, 0, 0, 0]

如果你使用更复杂的类型作为项而不是数字或字符串,请小心;你最终可能会得到一个列表,其中所有元素实际上都引用了同一个对象。

(在有人指出存在提供多维数组的软件包之前,例如numpy,我认为OP首先要学习更常见的类型是个好主意。)

答案 1 :(得分:2)

您可以使用以下list comprehensions生成5 x 5维数组

>>> array = [ [i+j for j in range(5)] for i in range(5)]
>>> array
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]

答案 2 :(得分:2)

如您所知,[]是空列表。进一步some_list[i]访问索引some_list的{​​{1}}。所以当python看到i时,它首先看到空列表,然后是一个左括号。然后假设您要访问空列表并期望索引或切片。当它遇到结束括号时,这是意外的并导致语法错误。

要创建包含列表的列表,您可以执行[][](包含三个空列表的列表)。但是,由于您使用的是循环,因此您更愿意在循环中填充数组,如下所示:

[[], [], []]

然而,这仍然不是你真正想做的事情,这太过于冗长。你应该做的是使用这样的列表理解:

a =[]
for i in range(3):
    a.append( [] )
    for j in range(3):
        a[i].append( i+j )

答案 3 :(得分:1)

就像Matti所说,[][]不是有效的语法,你必须手动将列表添加到第一个列表。

a = []

for i in range(3):
    a.append([])
    for j in range(3):
        a[i].append(i+j)