Python程序设计基础项目化教程 课件 集合与字典_第1页
Python程序设计基础项目化教程 课件 集合与字典_第2页
Python程序设计基础项目化教程 课件 集合与字典_第3页
Python程序设计基础项目化教程 课件 集合与字典_第4页
Python程序设计基础项目化教程 课件 集合与字典_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Python语言程序设计》集合与字典Contents掌握集合Set的用法字典Dictionary的用法序列、集合和字典的高级应用集合SetPART01Python中的集合(set)由若干无序的元素组成,每个元素都是唯一的(即集合中不能包含重复值的元素)且必须是可哈希类型的数据。可以使用一对大括号{}或set函数创建集合,如果要创建空集合则只能使用set函数。创建集合集合Set【任务描述】了解集合及其特性了解集合常用操作【关键步骤】了解集合及其特性了解集合常用操作示例01s=set([23,37,12,37,28])#创建集合对象并赋给sprint('s的值为:',s)#输出s集合中不能包含有重复值的元素。如果创建集合或向集合中插入元素时,指定的元素具有重复值,则集合会自动过滤掉重复值的元素、使得每种取值的元素只保留一个。s的值为:{28,12,37,23}程序执行完毕后,将在屏幕上输出如下结果:集合Set示例01s.add(x)集合中提供了两种插入元素的方法,分别是add和update。add方法的语法格式为:s.update(x)其作用是把x作为一个新的元素插入到集合s中,其中x必须是一个可哈希对象。update方法的语法格式为:其作用是把x拆分成多个元素后再将这多个元素插入到集合中,其中x必须是一个可迭代对象。集合Set示例011 s1=set([1,2])#创建集合对象并赋给变量s12 s2=set([1,2])#创建集合对象并赋给变量s23 s1.add('Python')#使用add方法向s1中插入元素'Python'4 s2.update('Python')#使用update方法将'Python'拆分成多个元素再插入到s2中5 print('s1的值为:',s1)6 print('s2的值为:',s2)7 #s1.add([4,5])#取消前面的注释则会报错8 s2.update([4,5])#使用update方法将[4,5]拆分成多个元素再插入到s2中9 print('s1的值为:',s1)10 print('s2的值为:',s2)11 s1.add(3)#使用add方法向s1中插入元素312 #s2.update(3)#取消前面的注释则会报错add方法和update方法使用示例s1的值为:{1,2,'Python'}s2的值为:{'y',1,2,'t','n','h','P','o'}s1的值为:{1,2,'Python'}s2的值为:{'y',1,2,'t',4,'n',5,'h','P','o'}程序执行完毕后,将在屏幕上输出如下结果:集合Set示例01ersection(s2)集合中的intersection方法可以用于计算一个集合与另一个集合的交集。其作用是计算s1和s2的交集并返回。intersection方法不会修改s1和s2本身的值。集合Set示例01s1.union(s2)集合中的union方法可以用于计算一个集合与另一个集合的并集。其作用是计算s1和s2的并集并返回。union方法不会修改s1和s2本身的值。集合Set示例01s1.difference(s2)集合中的difference方法可以用于计算一个集合与另一个集合的差集。其作用是计算s1和s2的差集并返回,差集是指由包含在s1中但不包含在s2中的元素组成的集合。difference方法不会修改s1和s2本身的值。集合Set示例01s1.symmetric_difference(s2)集合中的symmetric_difference方法可以用于计算一个集合与另一个集合的对称差集。其作用是计算s1和s2的对称差集并返回,对称差集是指由只包含在s1中或只包含在s2中的元素组成的集合。symmetric_difference方法不会修改s1和s2本身的值。集合Set示例01s1=set([1,2,3])#创建集合对象并赋给变量s1s2=set([2,3,4])#创建集合对象并赋给变量s2s3=ersection(s2)#计算s1和s2的交集,并将返回集合赋给s3s4=s1.union(s2)#计算s1和s2的并集,并将返回集合赋给s4s5=s1.difference(s2)#计算s1和s2的差集,并将返回集合赋给s5s6=s1.symmetric_difference(s2)#计算s1和s2的对称差集,并将返回集合赋给s6print('s1和s2的值分别为:',s1,s2)print('s1和s2的交集为:',s3)print('s1和s2的并集为:',s4)print('s1和s2的差集为:',s5)print('s1和s2的对称差集为:',s6)交集、并集、差集、对称差集示例s1和s2的值分别为:{1,2,3}{2,3,4}s1和s2的交集为:{2,3}s1和s2的并集为:{1,2,3,4}s1和s2的差集为:{1}s1和s2的对称差集为:{1,4}程序执行完毕后,将在屏幕上输出如下结果:集合Set示例01s1.issubset(s2)集合中的issubset方法可以用于判断一个集合是否是另一个集合的子集。其作用是判断s1是否是s2的子集。如果s1是s2的子集,则返回True;否则,返回False。集合Set示例01s1.issuperset(s2)集合中的issuperset方法可以用于判断一个集合是否是另一个集合的父集。其作用是判断s1是否是s2的父集(即判断s2是否是s1的子集)。如果s1是s2的父集,则返回True;否则,返回False。集合Set示例01s1=set([1,2,3,4])#创建集合对象并赋给变量s1s2=set([2,3,4,5])#创建集合对象并赋给变量s2s3=set([1,3])#创建集合对象并赋给变量s3print('s3是s1的子集:',s3.issubset(s1))print('s1是s3的父集:',s1.issuperset(s3))print('s3是s2的子集:',s3.issubset(s2))print('s2是s3的父集:',s3.issuperset(s2))子集、父集示例s3是s1的子集:Trues1是s3的父集:Trues3是s2的子集:Falses2是s3的父集:False程序执行完毕后,将在屏幕上输出如下结果:集合Set示例01字典DictionaryPART02与集合类似,字典(dictionary)也是由若干无序的元素组成。但与集合不同的是,字典是一种映射类型,字典中的每个元素都是键(key):值(value)的形式。字典中每个元素键的取值必须唯一(即集合中不能包含键值的元素)且必须是可哈希类型的数据,但对于每个元素值的取值则没有任何限制。字典的主要应用是做数据的快速检索。实际使用字典时,将要查询的数据作为键,将其他数据作为值。例如,在进行学生信息管理时,经常要根据学号进行学生信息的查询,此时就可以将学号作为键、而将其他信息作为值。可以使用一对大括号{}或dict函数创建字典,如果要创建空字典可以使用{}或dict()。创建字典字典Dictionary【任务描述】了解字典及其特性了解字典常用操作【关键步骤】了解字典及其特性了解字典常用操作示例02d.fromkeys(seq[,value])使用fromkeys方法进行字典初始化的方法。其中,d是一个已创建的字典对象;seq是一个包含了字典所有键名的序列;value是一个可选参数,其指定了各元素的初始值,默认情况下所有元素的值都被赋为None。字典Dictionary示例02d1={}.fromkeys(['sno','name','major'])d2=dict().fromkeys(['sno','name','major'],'Unknown')print('d1的值为:',d1)print('d2的值为:',d2)示例:d1的值为:{'sno':None,'name':None,'major':None}d2的值为:{'sno':'Unknown','name':'Unknown','major':'Unknown'}程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例02d.update(d2)#用另一个字典对象d2的元素修改或插入字典对象d的元素或d.update(键1=值1,键2=值2,…,键N=值N)#用键值列表修改或插入字典对象d的元素给指定键的元素赋值时,如果该键在字典中已存在,则会将该键对应的元素值做修改;如果该键在字典中不存在,则会在字典中插入一个新元素。另外,也可以使用字典中的update方法一次修改或插入多个元素,update方法的语法格式为:字典Dictionary示例021 stu=dict(sno='1810101')#创建字典对象并赋给变量stu2 print(stu)#输出stu的值3 stu['sno']='1810100'#将键为'sno'的元素的值修改为'1810100'4 print(stu)#输出stu的值5 stu['name']='李晓明'#插入一个键为'name'的元素,其值为'李晓明'6 print(stu)#输出stu的值7 stu.update({'name':'马红','age':19})8 print(stu)#输出stu的值9 stu.update(name='张刚',major='计算机')10 print(stu)#输出stu的值示例:{'sno':'1810101'}{'sno':'1810100'}{'sno':'1810100','name':'李晓明'}{'sno':'1810100','name':'马红','age':19}{'sno':'1810100','name':'张刚','age':19,'major':'计算机'}程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例01d.pop(key[,default])使用del可以删除某个元素,也可以使用字典中的pop方法删除指定键的元素。其作用是从字典d中删除键为key的元素并返回该元素的值;如果d中不存在键为key的元素,则返回default参数的值。字典Dictionary示例021 d=dict(sno='1810100',name='李晓明',age=19)#创建字典对象并赋给变量d2 print('第2行输出的字典d:',d)#输出d的值3 deld['age']#使用del删除d中键为'age'的元素4 name=d.pop('name')#使用pop删除d中键为'name'的元素,并将返回的元素值赋给name5 print('name的值为:',name)6 print('第6行输出的字典d:',d)7 major=d.pop('major','Notfound')#使用pop删除d中键为'major'的元素,并将返回的元素值赋给major8 print('major的值为:',major)示例:第2行输出的字典d:{'sno':'1810100','name':'李晓明','age':19}name的值为:李晓明第6行输出的字典d:{'sno':'1810100'}major的值为:Notfound程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例02len(d)使用Python提供的len方法可以计算字典中的元素个数,len方法的语法格式为:字典d中的元素个数为:3程序执行完毕后,将在屏幕上输出如下结果:其中,d为要计算元素个数的字典。例如,对于下面的代码:d=dict(sno='1810100',name='李晓明',age=19)#创建字典对象并赋给变量dprint('字典d中的元素个数为:',len(d))字典Dictionary示例02d.clear()使用字典中的clear方法可以一次将一个字典中的所有元素都清除,clear方法的语法格式为:字典d中的元素个数为:3字典d中的元素个数为:0程序执行完毕后,将在屏幕上输出如下结果:其中,d为要清除元素的字典。例如,对于下面的代码:d=dict(sno='1810100',name='李晓明',age=19)#创建字典对象并赋给变量dprint('字典d中的元素个数为:',len(d))d.clear()#调用clear方法清除d中的所有元素print('字典d中的元素个数为:',len(d))字典Dictionary示例02d.get(key,default=None)我们可以使用两种方法判断字段中是否存在某个键。一种方法是使用字典中的get方法,其语法格式为:其作用是从字典d中获取键为key的元素的值并返回。如果在字典d中不存在键为key的元素,则返回default参数的值(默认为None)。另一种方法是使用成员运算符in。字典Dictionary示例02d=dict(sno='1810100',name='李晓明')#创建字典对象并赋给变量difd.get('sno')!=None:#如果get方法返回的不是Noneprint('字典d中存在键为sno的元素')else:#否则

print('字典d中不存在键为sno的元素')if'name'ind:#如果字典d中有键为'name'的元素

print('字典d中存在键为name的元素')else:print('字典d中不存在键为name的元素')ifd.get('age')!=None:#如果get方法返回的不是Noneprint('字典d中存在键为age的元素')else:#否则

print('字典d中不存在键为age的元素')示例:字典d中存在键为sno的元素字典d中存在键为name的元素字典d中不存在键为age的元素程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例02第一种:

dMerge=dict(d1,**d2)第二种:

dMerge=d1.copy() dMerge.update(d2)这里介绍2种不同的字典拼接方法:其中,d1和d2是待拼接的两个字典,dMerge用于保存拼接后的字典。字典Dictionary示例02d1=dict(sno='1810100',name='李晓明')#创建字典对象并赋给变量d1d2=dict(age=19)#创建字典对象并赋给变量d2dMerge1=dict(d1,**d2)print('dMerge1的值为:',dMerge1)dMerge2=d1.copy()#使用copy方法复制d1生成新的字典对象并赋给dMerge2dMerge2.update(d2)#根据d2中的元素对dMerge2进行修改/插入操作print('dMerge2的值为:',dMerge2)示例:dMerge1的值为:{'sno':'1810100','name':'李晓明','age':19}dMerge2的值为:{'sno':'1810100','name':'李晓明','age':19}程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例02d.keys()使用字典中的keys方法可以获取一个字典所有的键,keys方法的语法格式为:d中的键为:dict_keys(['sno','name'])程序执行完毕后,将在屏幕上输出如下结果:d=dict(sno='1810100',name='李晓明')#创建字典对象并赋给变量dprint('d中的键为:',d.keys())其作用是返回一个包含d中所有键的对象。例如,对于下面的代码:字典Dictionary示例02d.values()使用字典中的values方法可以获取一个字典所有的值,values方法的语法格式为:d中的值为:dict_values(['1810100','李晓明'])程序执行完毕后,将在屏幕上输出如下结果:d=dict(sno='1810100',name='李晓明')#创建字典对象并赋给变量dprint('d中的键为:',d.values())其作用是返回一个包含d中所有值的对象。例如,对于下面的代码:字典Dictionary示例02d.items()使用字典中的items方法可以返回一个可按(键,值)方式遍历的对象,items语法格式为:sno1810100name李晓明程序执行完毕后,将在屏幕上输出如下结果:d=dict(sno='1810100',name='李晓明')#创建字典对象并赋给变量dforkey,valueind.items():print(key,value)其中,d是一个字典。例如,对于下面的代码:字典Dictionary示例01d.copy()使用字典中的copy方法可以实现一个字典的浅拷贝。copy方法的语法格式为:其作用是返回一个对字典d进行浅拷贝而得到的新字典。字典Dictionary示例021 stu1={'name':'李晓明','age':19,'score':{'python':95,'math':92}}2 stu2=stu1#直接赋值,此时stu2和stu2指向同一个字典对象3 stu3=stu1.copy()#使用copy方法进行浅拷贝4 print('stu1、stu2和stu3的内存地址分别为:',id(stu1),id(stu2),id(stu3))5 stu1['name']='马红'#将stu1中键为name的元素的值修改为'马红'6 print('stu1的值为:',stu1)7 print('stu2的值为:',stu2)8 print('stu3的值为:',stu3)9 print("stu1['score']和stu3['score']的内存地址分别为:",id(stu1['score']),id(stu3['score']))10 stu1['score']['python']=10011 print('stu1的值为:',stu1)12 print('stu3的值为:',stu3)示例:字典Dictionary示例02stu1、stu2和stu3的内存地址分别为:241848282956824184828295682418482829928stu1的值为:{'name':'马红','age':19,'score':{'python':95,'math':92}}stu2的值为:{'name':'马红','age':19,'score':{'python':95,'math':92}}stu3的值为:{'name':'李晓明','age':19,'score':{'python':95,'math':92}}stu1['score']和stu3['score']的内存地址分别为:24184828294962418482829496stu1的值为:{'name':'马红','age':19,'score':{'python':100,'math':92}}stu3的值为:{'name':'李晓明','age':19,'score':{'python':100,'math':92}}程序执行完毕后,将在屏幕上输出如下结果:浅拷贝使得原有字典对象和生成的字典对象具有一定独立性,但并不完全独立;当对字典可变类型元素中的元素做修改时,则会产生问题。为了解决这个问题,对于含有可变类型元素的字典对象,我们应该使用深拷贝方法。字典Dictionary示例02copy.deepcopy(d)使用copy模块的deepcopy方法可以实现深拷贝,deepcopy方法的语法格式为:其作用是根据字典d进行深拷贝创建一个新的字典对象并返回。深拷贝不仅使得原有字典对象和生成的字典对象对应不同的内存空间,而且使得两个字典对象中的可变类型元素对应不同的内存空间,从而使得两个字典对象完全独立。字典Dictionary示例021 importcopy#导入copy模块2 stu1={'name':'李晓明','age':19,'score':{'python':95,'math':92}}3 stu2=copy.deepcopy(stu1)#使用deepcopy方法进行深拷贝4 print("stu1和stu2的内存地址分别为:",id(stu1),id(stu2))5 print("stu1['score']和stu2['score']的内存地址分别为:",id(stu1['score']),id(stu2['score']))6 stu1['score']['python']=1007 print('stu1的值为:',stu1)8 print('stu2的值为:',stu2)示例:字典Dictionary示例02stu1和stu2的内存地址分别为:26156341230082613491686568stu1['score']和stu2['score']的内存地址分别为:26156341229362613491862984stu1的值为:{'name':'李晓明','age':19,'score':{'python':100,'math':92}}stu2的值为:{'name':'李晓明','age':19,'score':{'python':95,'math':92}}程序执行完毕后,将在屏幕上输出如下结果:字典Dictionary示例02高级应用PART03高级应用【任务描述】了解切片作用及操作了解列表生成器作用及操作了解生成器作用及操作了解迭代器作用及操作【关键步骤】了解切片作用及操作了解列表生成器作用及操作了解生成器作用及操作了解迭代器作用及操作示例03从一个序列对象中取部分元素形成一个新的序列对象是一个非常常用的操作,这个操作被称作切片(slice)。切片操作除了可以取指定范围中的多个连续元素,还可以以固定步长取指定范围中的多个不连续元素。高级应用示例031 ls1=list(range(0,20))#创建包含20个元素(0至19)的列表对象并赋给ls2 print('ls1:',ls1)#输出ls13 ls2=ls1[3:10:2]#从ls1下标从3至9的元素中以步长2取元素生成一个新列表赋给ls24 print('ls2:',ls2)#输出ls25 ls3=ls1[-10::3]#从ls1倒数第10个元素开始到最后一个元素以步长3取元素生成一个新列表赋给ls36 print('ls3:',ls3)#输出ls37 ls4=ls1[-1:-11:-3]#从ls1最后一个元素到倒数第10个元素以步长-3取元素生成一个新列表赋给ls48 print('ls4:',ls4)#输出ls4示例:ls1:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]ls2:[3,5,7,9]ls3:[10,13,16,19]ls4:[19,16,13,10]程序执行完毕后,将在屏幕上输出如下结果:高级应用示例03ls=[x*xforxinrange(10)]#创建包含10个元素的列表对象并赋给lsprint(ls)#输出ls在列表生成表达式中,可以使用for、if以及一些运算生成列表中的元素。[0,1,4,9,16,25,36,49,64,81]程序执行完毕后,将在屏幕上输出如下结果:即通过for使得x在0至9范围内依次取值,对于每一个x,将x*x的计算结果作为列表对象中的元素。高级应用示例03ls=[x*xforxinrange(10)ifx%2!=0]#创建由0至9中所有奇数的平方组成的列表对象print(ls)#输出ls还可以在for后面加上if判断。例如,对于下面的代码:[1,9,25,49,81]程序执行完毕后,将在屏幕上输出如下结果:高级应用示例03snolist=['1810101','1810102','1810103']namelist=['李晓明','马红','张刚']ls=['学号:'+sno+',姓名:'+nameforsnoinsnolistfornameinnamelist]forstuinls:print(stu)另外,列表生成表达式中也支持多层循环的形式,这里只给出两层循环的例子。学号:1810101,姓名:李晓明学号:1810101,姓名:马红学号:1810101,姓名:张刚学号:1810102,姓名:李晓明学号:1810102,姓名:马红学号:1810102,姓名:张刚学号:1810103,姓名:李晓明学号:1810103,姓名:马红学号:1810103,姓名:张刚程序执行完毕后,将在屏幕上输出如下结果:高级应用示例03g=(x*xforxinrange(10))#创建一个生成器对象并赋给gprint('g的类型为:',type(g))foriing:print(i,end='')通过生成器(generator)来根据需要进行计算并获取列表中某个元素的值。将列表生成表达式中的一对中括号改为一对小括号即可得到生成器。g的类型为:<class'generator'>0149162536496481程序执行完毕后,将在屏幕上输出如下结果:高级应用示例03deffaclist(n):#定义函数faclistresult=1foriinrange(2,n+1):#i在2至n范围内依次取值

yieldresult#遇到yield即暂停执行并返回result,下次执行时继续从此处开始执行

result*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论