数组(list)1数组的初始化在前几章中我们学习过,数组的初始化,如A=[1,2,3,4]。B=[]表示B是一个空的数组,一个元素都没有。在C语言中,我们声明一个具有10个元素的数组,可以写作:intx[10];如果我们在python中也想声明一个具有指定元素个数的数组,怎么写呢?一、初始化一个具有100个0的数组A=[0forIinrange(0,100)]或N=100A=[0forIinrange(0,N)]二、初始化一个具有100个元素,它的元素依次是1,2,3,4,…100的数组A=[iforiinrange(1,100+1)]print(A)[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]三、初始化一个具有20个元素,它的元素依次是12,22,32,42,…202的数组A=[i*iforiinrange(1,20+1)]print(A)[1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400]四、初始化一个具有20个元素,它的元素依次是f(1),f(2),f(3),f(4),…,f(20)的数组其中:f(x)=2x+5deff(x):return2*x+5A=[f(i)foriinrange(1,20+1)]print(A)[7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45]五、初始化一个具有5行3列数组,初始化一个具有5行3列数组,它的每个元素都是0Hang=5Lie=3A=[[0forLinrange(0,Lie)]forHinrange(0,Hang)]print(A)[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]2随机数函数正如使用数学函数前,需要先importmath一样,欲使用随机函数,需要先导入random模块,引入的方法有两种:方法一:importrandom这种方法调用随机数的方法时:X=random.randint(1,10)#产生一个从1到10之间的随机数方法二:fromrandomimportrandint这种方法调用随机数的方法时:X=randint(1,10)#产生一个从1到10之间的随机数例如:产生,并打印10个随机数:fromrandomimportrandintforiinrange(0,10):print(randint(1,10))88179564683产生10个(1,100)之间的随机数,存入一个数组中fromrandomimportrandintA=[randint(1,100)foriinrange(0,10)]print(A)[31,45,68,93,97,98,33,77,18,88]当然,每次运行这段程序的结果都不同,这就是“随机”数的意思。4向数组的尾部增加元素#coding=gbk#向列表的尾部增加元素x=[1,2,3,4]x.append(5)print(x)[1,2,3,4,5]5向数组中间插入一个元素A=[3,7,8,10]print(A=,A)A.insert(2,20)print(插入后,A=,A)A=[3,7,8,10]插入后,A=[3,7,20,8,10]说明:A.insert(2,20)表示在A的第2个元素前插入新元素20.6删除数组中的一个元素A=[3,7,8,10]print(A=,A)del(A[2])print(删除第2个元素后,A=,A)A=[3,7,8,10]删除第2个元素后,A=[3,7,10]7数组的切片通过操作符“[:]”,将列表元素连续取出的部分,叫切片,又叫子列表(它仍然是数组)。切片A[m:n]的意思是:在数组A中,起始位置为m,结束位置为n(但不包括n)的连续片断。A=[3,7,8,10,21,22]print(A=,A)print(A[0:3]=,A[0:3])print(A[1:3]=,A[1:3])print(A[1:-1]=,A[1:-1])print(A[1:1]=,A[1:1])A=[3,7,8,10,21,22]A[0:3]=[3,7,8]A[1:3]=[7,8]A[1:-1]=[7,8,10,21]A[1:1]=[]当m或n的值小于0时,表示从右侧数起,-1表示右侧第1个(说明:最右侧的元素是-1,因为无法表示-0)第2个元素当m或n小于0时,系统内部首先将其转化为正值,转化规则是:从右侧开始数起,第一个元素是-1.A=[3,5,7,8,10]元素值357810序号01234负编号-5-4-3-2-1当m,n都转化为正序号后,如果n=m,则A[m:n]的值是[],即空切片。一、使用切片删除数组的一部分元素A=[3,7,8,10,21,22]print(A=,A)A[1:3]=[]print(A=,A)A=[3,7,8,10,21,22]A=[3,10,21,22]二、使用切片替换A=[3,7,8,10,21,22]print(A=,A)A[1:3]=[5,6,9]print(A=,A)A=[3,7,8,10,21,22]A=[3,5,6,9,10,21,22]三、使用切片插入A=[3,7,8,10,21,22]print(A=,A)A[1:1]=[5,6,9]print(A=,A)A=[3,7,8,10,21,22]A=[3,5,6,9,7,8,10,21,22]A=[3,7,8,10,21,22]print(A=,A)A[len(A):len(A)]=[5,6,9]print(A=,A)A=[3,7,8,10,21,22]A=[3,7,8,10,21,22,5,6,9]A=[3,7,8,10,21,22]print(A=,A)A[-1:-1]=[5,6,9]print(A=,A)A=[3,7,8,10,21,22]A=[3,7,8,10,21,5,6,9,22]8数组的排序A=[3,1,8,0,22,21]print(A=,A)A.sort()print(排序后,A=,A)A=[3,1,8,0,22,21]排序后,A=[0,1,3,8,21,22]A[1:3]从第1个元素到第3不含第3个元素9print不换行的方法每次执行一个print(…)后,都会自动换行。如果想让后面的输出不换行,可以用print(……,end=””)语句。请观察下面例子。foriinrange(1,5+1):print(i)print(--------)foriinrange(1,5+1):print(i,end=)print(--------)12345--------12345--------10二维数组的排序二维数组A的排序(A.sort()),是按每行的第0个元素的大小进行排序。A=[[1,2,3,4],[-1,2,5,8],[10,3,6,9],[4,100,1,7]]print(A=,A)A.sort()print(排序后)foriinrange(0,len(A)):forjinrange(0,len(A[i])):print(A[i][j],end=)print()A=[[1,2,3,4],[-1,2,5,8],[10,3,6,9],[4,100,1,7]]排序后-1258123441001710369也许你觉得这个输出的样式不整齐,不够美观,是吗?欲知后事如何,请参看第6章。11将数组中元素的顺序前后颠倒—逆序A=[1,2,3,4,5,8,-1]print(A=,A)A.reverse()print(逆序后,A=,A)A=[1,2,3,4,5,8,-1]逆序后,A=[-1,8,5,4,3,2,1]如果我们不用reverse,打算如C语言一样自已写这个方法,请参照下面的代码。#coding=gbkA=[1,2,3,4,5,8,-1]print(A=,A)I=0J=len(A)-1whileIJ:T=A[I]A[I]=A[J]A[J]=TI=I+1J=J-1print(逆序后,A=,A)A=[1,2,3,4,5,8,-1]逆序后,A=[-1,8,5,4,3,2,1]相当于A.reverse()