在python中,如何构建矩阵呢,我们一般都想到用列表去实现吧。
于是染念便使用列表的特性快速生成
# 复制
l=[[0]*n]*n
的确生成了
然而这种方法有种弊端。
我们先了解下*的作用
*用于重复列表,或者说是复制
使用切片获取,每个元素的地址是一样的!
但这又不同,
当我们去改变l[0][4]
的时候,只有l[1][4]
`l2`l[4][4]
的元素发生改变,而且地址也发生变化,这4个仍然相同,却与其它元素的地址不同了。
那么为什么要变不全部一起变呢?因为前面说到每个地址都一样呢。
我认为是*的作用,你瞧,最外圈也乘了n,也就是说,这些也要复制,我们的确要改变0,4的值,但是我要复制,再给你复制n-1遍,于是产生了这样的局面。
但如果是[0]*5
,虽然创建的元素地址一样,但是改变一个值,其它元素不一样,而上面改变就是因为外圈的✖,造成这样的局面
那么,我们该如何去创建一个矩阵呢?
- 有numpy这个包
- 但是在比赛中常常都是断网,而且不保证这个包安装了,所以比较推荐大家自己去生成
方法很简单:
[[0 for i in range(col)] for j in range(row)]