如果在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)]当然,如果你喜欢动一动手指就让整个矩阵发生翻天覆地变化的快感的话,当我没说~
