勤学思合作机构>

勤学思培训网RMOYRF

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

位置:勤学思培训网RMOYRF » 培训新闻 » 中小学 » 高考艺考辅导 » 高考辅导班 » 总算理解python如何定义数组

总算理解python如何定义数组

发布时间:2023-01-05 06:08:14
所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。那么python如何定义数组呢?一起来了解下吧: python如何定义数组
[图片0] 一、一维数组 1.直接定义 matrix=[0,1,2,3] 2.间接定义 matrix=[0 for i in range(4)] print(matrix) 输出: [0, 0, 0, 0] 3.数组乘法 matrix=[0]*5 print(matrix) 输出: [0, 0, 0, 0, 0] 二、二维数组 1.直接定义(3*2) matrix=[[0,0],[0,0],[0,0]] 2.间接定义(3*2) matrix=[[0 for i in range(2)] for i in range(3)] print(matrix) 输出: [[0, 0], [0, 0], [0, 0]] 3.数组乘法 matrix=[[0,0]]*5 print(matrix) 输出: [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] Python数组定义的方法 Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]=2,但引出一个问题,即如果数组a想定义为0到999怎么办?这时可能通过a = range(0, 1000)实现。或省略为a = range(1000).如果想定义1000长度的a,初始值全为0,则 a = [0 for x in range(0, 1000)] 下面是二维数组的定义: 直接定义: 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并不符合我们常规意义上的二维数组。 同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,而没有上面相同引用的问题,估计数组c的定义时是值类型相乘,而前面b的用类型的相乘,因为一维数组是一个引用(借用C#中的值类型和引用类型,不知是否合适)。 python如何定义二维数组 先看一段代码 [py] array = [0, 0, 0]
[图片1] matrix = [array*3] print matrix ## [[0,0,0,0,0,0,0,0,0]][/py] 这段代码其实没有新建一个二维数组 再看一段代码 [py] array = [0, 0, 0] matrix = [array] * 3 print matrix ## [[0, 0, 0], [0, 0, 0], [0, 0, 0]][/py] 咋一看这段代码应该创建一个二维数组了 测试一下 [py] matrix[0][1] = 1 print matrix ## [[0, 1, 0], [0, 1, 0], [0, 1, 0]][/py] 照理matrix[0][1]修改的应该只是二维数组中的一个元素,但是测试结果表明,修改的是每个List的第二个元素。 有问题看文档,然后我找到了The Python Standard Library 其中. Sequence Types是这样描述的: Note also that the copies are shallow; nested structures are not copied. This often haunts new Python programmers; consider: >>> lists = [[]] * 3 >>> lists [[], [], []] >>> lists[0].append(3) >>> lists [[3], [3], [3]] What has happened is that [[]] is a one-element list containing an empty list, so all three elements of [[]] * 3 are (pointers to) this single empty list. Modifying any of the elements of lists modifies this single list. You can create a list of different lists this way: >>> >>> lists = [[] for i in range(3)] >>> lists[0].append(3) >>> lists[1].append(5) >>> lists[2].append(7) >>> lists [[3], [5], [7]] 也就是说matrix = [array] * 3操作中,只是创建3个指向array的引用,所以一旦array改变,matrix中3个list也会随之改变。 那如何才能在python中创建一个二维数组呢? 例如创建一个3*3的数组 方法1 直接定义 [py]matrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]][/py] 方法2 间接定义 matrix = [[0 for i in range(3)] for i in range(3)] Python数组的使用方法 二维数组的初始化 matirx_done = [[0 for i in range(0, len(matirx))]for j in range(0, len(matirx[0]))] 就将其初始化为一个与matrix相同大小的元素全为 0 的矩阵 数组的多级排序 在数组 idea_collect = [[3, 1, 2], [3, 2, 1], [3, 2, 2], [3, 1, 1]] 中, 先按照第二项排列, 再按照第三项倒序排列 可写为: (key=lambda x: (x[1], -x[2])) 其中, x[1] 代表第二项正序排列, -x[2] 代表第三项倒序排列 排列结果为 [[3, 1, 2], [3, 1, 1], [3, 2, 2], [3, 2, 1]] 在一个 class 中多个函数不传参使用同一个数组 如例所示: class Partition: def __init__(self): = [] def partition(self, num, start, end): = num def partition_core(self): del [0] 其中,就是 class 中两个函数同时可以直接调用的数组, 不过最好先在def __init__中声明这个数组。

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

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

微信访问

#tel_020#