当前位置: 首页 > 后端技术 > Python

Python内置数据结构列表、集合、字典、元组(二)

时间:2023-03-26 19:37:40 Python

#传值和传地址的区别#对于简单值,采用传值操作,即函数中参数的操作不影响外部变量#对于复杂变量,采用传地址操作,此时time,函数内的参数和外部变量的内容是一样的,#这个内容的任何改动都会影响其他变量或参数的使用defa(n):n[2]=300print(n)returnNonedefb(n):n+=100print(n)返回Nonean=[1,2,3,4,5,6]bn=9print(an)a(an)print(an)print(bn)b(bn)print(bn)[1,2,3,4,5,6][1,2,300,4,5,6][1,2,300,4,5,6]91099关于列表的函数l=['a','我爱你',45,766,5+4j]l['a','我爱你',45,766,(5+4j)]#append插入一个内容,appenda=[iforiinrange(1,5)]print(a)a.append(100)print(a)[1,2,3,4][1,2,3,4,100]#插入:插入指定位置#insert(index,date),插入位置在index之前print(a)a.insert(3,666)print(a)[1,2,3,4,100][1,2,3,666,4,100]#delete#delDelete#pop,从对应位置取出一个元素,即就是,取出最后一个元素print(a)last_ele=a.pop()print(last_ele)print(a)[1,2,3,666,4,100]100[1,2,3,666,4]#remove:删除列表中指定值的元素#如果要删除的值不在列表中,会报错#即删除List的指定值的操作,应该使用try...except语句,或者先做判断#ifxinlist:#list.remove(x)a.insert(4,666)print(a)print(id(a))a.remove(666)打印(a)print(id(a))#输出两个相同的id值,表示remove操作直接对原列表进行操作[1,2,3,4,666]2261435601928[1,2,3,4]2261435601928#clear:clearprint(a)print(id(a))a.clear()print(a)print(id(a))#如果不需要列表地址不变,可以使用以下方法清除列表#a=list[]#a=[][]2261435601928[]2261435601928#reverse:flip,flipinplacea=[1,2,3,4,5]print(a)print(id(a))a.reverse()print(a)print(id(a))[1,2,3,4,5]2261441839496[5,4,3,2,1]2261441839496#exrend:扩展列表,两个列表,一个直接拼接在后者上面a=[1,2,3,4,5]b=[6,7,8,9,10]print(a)print(id(a))a.extend(b)print(a)print(id(a))[1,2,3,4,5]2261441540872[1,2,3,4,5,6,7,8,9,10]2261441540872#count:在列表Number中查找指定的值或元素print(a)a.append(8)a.insert(4,8)print(a)a_len=a.count(8)print(a_len)[1,2,3,4,5,6,7,8,9,10][1,2,3,4,8,5,6,7,8,9,10,8]3#copy:copy,shallowcopy#list类型变量赋值例子a=[1,2,3,4,5,666]print(a)#list类型,简单的赋值操作,就是传地址b=ab[3]=777print(a)print(id(a))print(b)print(id(b))print("*"*20)#为了解决以上问题,列表赋值需要使用复制函数b=a.copy()print(a)print(id(a))print(b)print(id(b))print("*"*20)b[3]=888print(a)print(b)[1,2,3,4,5,666][1,2,3,777,5,666]2195797555400[1,2,3,777,5,666]2195797555400*********************[1,2,3,777,5,666]2195797555400[1,2,3,777,5,666]2195798283976********************[1,2,3,777,5,666][1,2,3,888,5,666]#深copy和shallowcopy的区别#出现下面问题的原因是copy函数是shallowcopy函数,即只复制一层内容#deepcopy需要特定的工具a=[1,2,3,[10,20,30]]b=a.copy()打印(id(a))打印(id(b))打印(id(a[3]))打印(id(b[3]))a[3][2]=666print(a)print(b)2195798054792219579642029621957981088722195798108872[1,2,3,[10,20,666]][1,2,3,[10,20,666]]元组可以被视为一个Unchangeablelisttuplecreation#创建一个空元组t=()print(type(t))#创建一个只有一个值的元组s=(1)print(type(s))print(s)t=(1,)print(type(t))print(t)t=1,print(type(t))print(t)#创建多个值的元组t=(1,2,3,4,5)print(type(t))print(t)t=1,2,3,4,5print(type(t))print(t)#使用其他结构创建l=[1,2,3,4,5]t=tuple(l)print(t)1(1,)(1,)<类'元组'>(1,2,3,4,5)(1,2,3,4,5)(1,2,3,4,5)元组的特征是序列表,有序元组的数据值可以是访问且无法修改。不能修改,不能修改Tupledatacanbeanytype总之,list的所有特性,除了可以修改,tuples都有,也就是说list的一些操作,比如索引,切片,序列加法,乘法,隶属操作等,完全一样#索引操作t=(1,2,3,4,5)print(t[4])5#错误过多print(t[12])------------------------------------------------------------------------IndexErrorTraceback(mostrecentcalllast)in1#Excesserror---->2print(t[12])IndexError:元组索引超出范围=(1,2,3,4,5,6)t1=t[1::2]print(id(t))print(id(t1))print(t1)#切片可以超标t2=t[2:100]print(t2)21957980587602195797607552(2,4,6)(3,4,5,6)#序列加法t1=(1,2,3)t2=(4,5,6,7)#寻址操作print(t1)print(id(t1))t1+=t2print(t1)print(id(t1))#上面的操作类似t1=(1,2,3)t1=(2,3,4)#元组不可修改的意思不能修改内容#修改元组内容会报错t1[1]=100(1,2,3)2195798298200(1,2,3,4,5,6,7)2195795953560------------------------------------------------------------------------TypeErrortraceback(mostrecentcalllast)in16#元组不能修改,也就是说内容不能修改17#修改元组内容会报错--->18t1[1]=100TypeError:'tuple'objectdoesnotsupportitemassignment#元组乘法t=(1,2,3)t=t*3print(t)(1,2,3,1,2,3,1,2,3)#成员检测t=(1,2,3)if2int:print("Yes")else:print("No")Yes#元组遍历,一般使用for#1.单层元组遍历t=(1,2,3,"若辰","i","love")foriint:print(i,end="")123rouchenilove#2.二级元组遍历t=((1,2,3),(2,3,4),("i","love","you"))#以上元组的遍历可以如下#1.fori在t:print(i)fork,m,n在t:print(k,"--",m,"--",n)(1,2,3)(2,3,4)('i','爱','你')1--2--32--3--4i--爱--你