我编写了这段代码,但它在第一行显示错误SyntaxError: invalid syntax
:
a =[][]
for i in range(3):
for j in range(3):
a[i][j] = i+j
答案 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)