勤学思合作机构>

勤学思培训网KTYKGJ

欢迎您!
朋友圈
机构未认证 全国统一学习专线 8:00-21:00

位置:勤学思培训网KTYKGJ » 培训新闻 » 中小学 » 中小学课外辅导 » 高中学科辅导 » 终于懂得python如何定义二维数组

终于懂得python如何定义二维数组

发布时间:2023-01-05 04:55:12
一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此python允许构造多维数组。那么python如何定义二维数组呢?一起来了解下吧: python如何定义二维数组
[图片0] >>> 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)] python如何创建二维数组 创建一个宽度为3,高度为4的数组 [[0,0,0], [0,0,0], [0,0,0], [0,0,0]] myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] 为什么? 答案:list * n—>n shallow copies of list concatenated, n个list的浅拷贝的连接 例: >>> lists = [[]] * 3 >>> lists [[], [], []] >>> lists[0].append(3) >>> lists [[3], [3], [3]] [[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表
[图片1] 所以需要用另外一种方式进行创建多维数组,以免浅拷贝: >>> lists = [[] for i in range(3)] >>> lists[0].append(3) >>> lists[1].append(5) >>> lists[2].append(7) >>> lists [[3], [5], [7]] 二维数组创建方式修改为:* myList = [([0] * 3) for i in range(4)] python二维数组怎么创建 (1) 暴力创建 mylist = [[0,0,0], [0,0,0], [0,0,0], [0,0,0]] (2)函数创建 def getMatrix(rows,cols): matrix = [[0 for col in range(cols)] for row in range(rows)] for i in range(rows): for j in range(cols): print matrix[i][j], print 'n' (3) 快速创建 myList = [([0] * 3) for i in range(4)]#初始化为0 myList = [([] * 3) for i in range(4)]#初始化为空 错误创建:myList = [[0] * 3] * 4 原因:*4只是把一维数组复制了四次引用。如果修改mylist[0][1]的值,mylist[2][1]、mylist[3][1]、mylist[4][1]的值都会变。 (4)定义一个嵌套的list表示一个二维数组,并初始化为这样: score = [[0]*3, [0]*3,[0]*3] print score 这样在循环外就能方便的访问每个元素了。 python定义二维数组的方法 直接定义: a=[[1,1],[1,1]] 这里定义了一个2*2的,且初始为0的二维数组。 间接定义: a=[[0 for x in range(10)] for y in range(10)] 这里定义了10*10初始为0的二维数组。 还有更简单的字义二维数组的方法: b = [[0]*10]*10 定义10*10初始为0的二维数组。 与a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。 但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别: a[0][0]=1时,只有a[0][0]为1,其他全为0。 b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。 由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。 故 b = [[0]*10]*10并不符合我们常规意义上的二维数组。

更多培训课程,学习资讯,课程优惠,课程开班,学校地址等学校信息,请进入 勤学思培训网KTYKGJ 详细了解
咨询电话:

还没有找到合适的课程?赶快告诉课程顾问,让我们顾问马上联系您! 靠谱 的培训课程,省时又省力!

微信访问

#tel_020#