[] []给出在Python

问题描述:

一个SyntaxError我写了这个代码,但它的第一行给出了一个错误SyntaxError: invalid syntax[] []给出在Python

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

我投票中的一种书 – stackptr 2016-06-25 15:56:10

[][]无效语法。 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首先学习较为普遍的一个好主意。)

您可以使用以下list comprehensions生成一个5×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]] 

像马蒂说,[][]是不是一个有效的语法,你必须在列表中手动添加到第一个列表。

a = [] 

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

如您所知,[]是空白列表。进一步some_list[i]访问some_list索引i。所以当python看到[][]时,它首先看到空的列表,然后是一个开头的括号。然后它假定你想访问空列表并期待索引或片。当它接着碰到括号时,这是意想不到的,并导致你的语法错误。

要创建包含列表的列表,您可以执行[[], [], []](这是一个包含三个空列表的列表)。但是,由于您使用的是循环,你更要填充在循环数组,这将是这样的:

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

但是这仍然不是你真正想要做的是过于冗长。你应该做的是用一个列表理解是这样的:

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

关闭这一问题作为题外话,因为你可以在google的语法或读到它在你的榜样'一[我] = []'不起作用。请使用'a.append([])'。另外'a [i] [j] = i + j'应该是'a [i] .append(i + j)' – 2011-05-03 09:39:33

+0

@Rumple:是的,我已经注意到并解决了这个问题。 – sepp2k 2011-05-03 09:40:22