Python中想要创建一个二维数组:
aList = [[0] * cols for i in range(rows)]
如果在Python中想要创建一个二维数组,我们该如何写呢?
>>> A = [0]* 3 * 4
>>> B = [[0]*3] * 4
是A还是B呢?当然是B了!还是先输出看一下:
>>> A
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> B
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
不出所料,我们应该按照B = [[0]*3]*4
来创建二维数组。
!!!!!!!!BUT!!!!!!!!!
当你按照上述方式来创建二维数组的时候,如果你对二维数组中的一个数进行改变,会输出什么呢?我们来试一下,比如我们把第一行的第二个数字改为2,B[0][1] = 2
,输出:
>>> B
[[0, 2, 0], [0, 2, 0], [0, 2, 0], [0, 2, 0]]
为什么会是这样?!!
因为list在Python中是个可变类型啊亲!按照B = [[0]*3]*4
来创建二维数组只是4个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表的。
另一个栗子:
>>> A = [0]*3
>>> B = A
>>> B[0] = 1
>>> A
[1, 0, 0]
坑爹啊!!
所以,在Python中创建二维数组应该这样写:
>>> C = [[0]*3 for i in range(4)]
>>> C
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> C[0][1] = 2
>>> C
[[0, 2, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
所以下次在Python中创建二维数组时候记住了:
aList = [[0] * cols for i in range(rows)]
# 输出数组的行和列数 print x.shape # (4, 3) # 只输出行数 print x.shape[0] # 4 # 只输出列数 print x.shape[1] # 3