Python二维数组的创建

如果在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)]

当然,如果你喜欢动一动手指就让整个矩阵发生翻天覆地变化的快感的话,当我没说~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值