Python程序设计基础 课件 第四章 数据表示_第1页
Python程序设计基础 课件 第四章 数据表示_第2页
Python程序设计基础 课件 第四章 数据表示_第3页
Python程序设计基础 课件 第四章 数据表示_第4页
Python程序设计基础 课件 第四章 数据表示_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

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

文档简介

第四章数据表示Contents元组集合字典本章小结习题典型实例第2章介绍了基本数据类型(整型、浮点型、复数型、字符串等)和列表类型等。尽管基本数据类型与列表相组合可以表示任意数据类型,但是Python还是将一些特殊形式的数据类型及其相关的方法封装成一些新的类,以方便这些数据类型的操作。这些数据类型包括元组、集合和字典等类型,本章将详细介绍这些新的数据表示类型。01元组4.1元组在平面中,表示点的位置(或称矢量)的坐标(x,y),是一对有序数对,即(x,y)和(y,x)代表不同的点。同样,在n维空间中,点的坐标(x1,x2,…,xn)也是一组有序数列,各个坐标值的位置是固定的。元组对应着数学上的一组有序数列,例如,包含2个元素x和y的元组表示为(x,y),这里x和y为元组的元素,且不可改变。可以把元组理解为一个常量数列。4.1.1元组定义元组为由一列有顺序的数据组成的数据类型,元组是只读的。元组间的元素间用“,”号分隔,用圆括号作为元组与其他数据的分界符。空元组和只有一个元素的元组,没有意义,如果非要表示只含一个元素的元组,使用类似于形式“(3,)”表示,即“,”号不能少。4.1.1元组定义1if__name__=='__main__':2p1=(3,5)3print(f'p1={p1}')4p2=(5,7,9)5print(f'p2={p2}')6print("p2'stypeis:",type(p2))7p3=tuple((3,1,2))8print(f'p3={p3}')4.1.1元组定义9p4=1,3,5,710print(f'p4={p4}')11u=[9,8,5]12p5=tuple(u)13print(f'p5={p5}')14p6=(3,)15print(f'p6={p6}')

4.1.1元组定义16print("p6'stypeis:",type(p6))17p7=()18print(f'p7={p7}')19print("p7'stypeis:",type(p7))20p8=tuple(range(1,10+1))21print(f'p8={p8}')

4.1.1元组定义第2行“p1=(3,5)”定义元组(3,5),赋给p1,p1可以表示平面上点的坐标,或平面上的一个矢量。第3行“print(f'p1={p1}')”在屏幕上输出“p1=(3,5)”,注意,输出元组时,自动添加一对圆括号。第4行“p2=(5,7,9)”将元组(5,7,9)赋给p2,p2可表示三维空间中的一个点,或三维空间中的一个矢量。第5行“print(f'p2={p2}')”在屏幕上输出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上输出p2的类型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元组定义第2行“p1=(3,5)”定义元组(3,5),赋给p1,p1可以表示平面上点的坐标,或平面上的一个矢量。第3行“print(f'p1={p1}')”在屏幕上输出“p1=(3,5)”,注意,输出元组时,自动添加一对圆括号。第4行“p2=(5,7,9)”将元组(5,7,9)赋给p2,p2可表示三维空间中的一个点,或三维空间中的一个矢量。第5行“print(f'p2={p2}')”在屏幕上输出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上输出p2的类型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元组定义第7行“p3=tuple((3,1,2))”为创建元组的标准方法,这里tuple为元组类型的类名,括号中的参数“(3,1,2)”为创建元组对象时设定的元组中各个元素的值,这里,表示创建一个包含3、1、2三个元素的元组。第8行“print(f'p3={p3}')”在屏幕上输出元组p3,得到“p3=(3,1,2)”。第9行“p4=1,3,5,7”是一种非标准的创建元组的方法,不建议使用。在Python语言中,将这种形式的输入自动设定为元组。第10行“print(f'p4={p4}')”输出元组p4,得到“p4=(1,3,5,7)”。4.1.1元组定义第11行“u=[9,8,5]”得到列表u。第12行“p5=tuple(u)”也是一种标准的创建元组的方法,这里tuple为元组的类名,参数u为列表,将自动转化为元组的形式,赋给p5。第14行“p6=(3,)”创建仅包含一个元素的元组,这种元组没有意义。注意,这里的“,”号不能省略,因为“(3)”将表示整数3,其中的圆括号只是数据间的分界符,将被忽略。第15行输出元组p6,得到“p6=(3,)”。第16行输出p6的类型,得到“p6'stypeis:<class'tuple'>”,可见p6为一个元组。4.1.1元组定义第17行“p7=()”生成一个空元组,空元组没有意义。第18行“print(f'p7={p7}')”输出空元组p7。第19行“print("p7'stypeis:",type(p7))”输出p7的类型,得到“p7'stypeis:<class'tuple'>”。第20行“p8=tuple(range(1,10+1))”由range对象生成元组,这里借助于类tuple的构造方法生成元组p8,。第21行“print(f'p8={p8}')”输出元组p8,得到“p8=(1,2,3,4,5,6,7,8,9,10)”。4.1.1元组定义程序执行结果:模块zym0401执行结果4.1.1元组定义元组是一种复合数据类型,可以保存任意类型的数据,这一点与列表相似。需要特别注意的是,元组中可以包含列表,而且其中的列表元素可以修改,这是因为元组中嵌入的列表仅是占位符,即元组使用了类似于“指针”或者“标签”的形式“引用”其中嵌入的列表,因此,对元组中列表的操作仍然是对列表的操作,而不是对元组的元素的操作,所以,元组中嵌入的列表中的元素可以修改。4.1.1元组定义包含不同数据类型的元组:1if__name__=='__main__':2a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)3print('a=',a)4print("a'stypeis:",type(a))5a[2][1]=a[2][1]+36print('a=',a)4.1.1元组定义第2行“a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)”定义元组a,其中包含了一个元组(2,3)、一个列表[4,5]、一个字符串“HelloWorld”、三个整数和三个浮点数。第3行“print('a=',a)”输出元组a。第4行“print("a'stypeis:",type(a))”输出元组a的类型。第5行“a[2][1]=a[2][1]+3”修改元组中列表“[4,5]”的第1个元)。第6行“print('a=',a)”输出元组a。4.1.1元组定义程序执行结果如下:模块zym04024.1.1元组定义上程序段中关于只读元组中的列表可修改的例子,进一步说明Python语言中所有的数据名称均为该数据的“标签”,Python语言中没有“变量”的概念,数据的“标签”指向数据在内存中的首地址。元组是只读的,所以元组中的每个“标签”不能修改,其中的“列表”的标签也不能修改,但是,通过列表的“标签”访问的列表的元素是可能修改的。4.1.1元组定义事实上,元组的作用在于表达类似于空间中点的坐标(或矢量)之类的有序数据,不宜用于其他用途。适合使用列表类型表示的数据,不应使用元组这种类型表示,因此,元组中嵌套列表不是一种好的数据表示。4.1.2元组元素访问方法元组中的元素访问方法与列表中的元素访问方法相同。元组中元素的索引方式有两种:一种为从左向右,索引号从0开始,从左向右递增1;另一种从右向左,最后边的元素(或称元组最后的元素)的索引号为-1,从右向左递减1。可以使用“:”号一次性访问元组的多个元素,有时也称元组的“切片”访问。4.1.2元组元素访问方法1if__name__=='__main__':2a=(19,35,7,12,15,29,24,20,30,16,10,21)3print('a=',end='')4foreina:5print(e,end='')6print('\na=',end='')7foriinrange(len(a)):8print(a[i],end='')4.1.2元组元素访问方法9print()10print(f'a={a}')11print(f'First:{a[0]},Last:{a[-1]}.')12print(a[2:2])13print(f'a[1]~a[1]:{a[1:2]}')14print(f'a[3]~a[8]:{a[3:8+1]}')15print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')4.1.2元组元素访问方法16print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')第2行“a=(19,35,7,12,15,29,24,20,30,16,10,21)”定义元组a。第3行“print('a=',end='')”输出“a=”且不换行。第4~5行为一个for结构,第4行“foreina:”遍历元组a中的元素,对于每一个元素e,第5行“print(e,end='')”输出e的值,后加一个空格。第4~5行说明元素为可迭代型的对象,可以使用for结构逐个访问元组中的元素。4.1.2元组元素访问方法第6行先输出换行符,再输出“a=”。第7~8行为一个for结构,第7行“foriinrange(len(a)):”表示i从0按步长1递增到len(a)-1,此时的每个i可作为元组中元素的索引号;对每个i,执行第8行“print(a[i],end='')”输出元组a中的各个元素。可见,元组中元素的访问可以借助于其索引号访问,例如,a[0]为元组a的第0个元素。第9行“print()”输出一个空白行。第10行输出元组a,得到“a=(19,35,7,12,15,29,24,20,30,16,10,21)”。4.1.2元组元素访问方法第11行“print(f'First:{a[0]},Last:{a[-1]}.')”输出元组a的首元素和尾元素。第12行“print(a[2:2])”输出一个空元组。这是因为“2:2”表示索引号从2至1,故将得到一个空元组。因此,使用了“:”访问元组将返回一个元组。第13行“print(f'a[1]~a[1]:{a[1:2]}')”输出一个元组,只包含元素a[1]。第14行“print(f'a[3]~a[8]:{a[3:8+1]}')”输出一个元组,包含元素a[3]至a[8]。4.1.2元组元素访问方法第15行“print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')”输出一个元组,包括元素a[3]、a[5]和a[7]。这里的“3:8+1:2”表示索引号从3至8,步长为2。第16行“print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')”输出一个元组,包含元素a[-1]至a[-4]。这里的“-1:-4-1:-1”(即“-1:-5:-1”)表示索引号从-1至-4,步长为-1。4.1.2元组元素访问方法使用“:”访问元组的部分内容将返回一个新的元组。“m:n+1:k”表示索引号从m递增到n,步长为k。如果k为1,可以省略。如果m省略,表示索引号从0开始;如果n+1省略表示索引到元组的最后一个元素。因此,a[:]和a的含义相同,均指整个元组a;而a[::2]表示得到一个新的元组,只包含原元组中偶数索引号上的元素。4.1.2元组元素访问方法程序执行结果:模块zym0403执行结果4.1.3元组元素访问方法元组的内置方法,或称元组类的内置方法,是指元组类内部定义的公有方法。Python语言的内置函数,可以称为全局函数。下面重点介绍表中所示的Python全局函数在元组上的用法,这里设元组a=(3,5,7,9)。4.1.3元组元素访问方法4.1.3元组元素访问方法1if__name__=='__main__':2a=(3,5,7,9)3s=len(a)4print(f'Lengthofa:{s}.')5print(f'MinandMaxofa:{min(a)},{max(a)}')6del(a)7a=tuple([3,5,7,9])8print(a)4.1.3元组元素访问方法第2行“a=(3,5,7,9)”定义元组a。第3行“s=len(a)”获得元组的长度4。第4行“print(f'Lengthofa:{s}.')”输出“Lengthofa:4.”。第5行“print(f'MinandMaxofa:{min(a)},{max(a)}')”输出元组a的最小值和最大值,得到“MinandMaxofa:3,9”。第6行“del(a)”删除元组a。请注意,Python有“垃圾”回收机制,不使用的内存“空间”将被自动回收。4.1.3元组元素访问方法第7行再次对“标签”a赋值,原来的“a”将被自动从内存中清除,因此,一般无需使用del函数。第7行“a=tuple([3,5,7,9])”得到一个新的元组a。注意,这里的a和第2行的a不是同一个a,尽管其内容相同。第8行“print(a)”输出元组a,得到“(3,5,7,9)”。4.1.4元组应用实例元组可以视为其元素是常量的特殊“列表”,元组和列表均能“多变量”赋值,所谓的“多变量”赋值例如:[x,y,z]=[1,2,3]#借助于列表实现x=1、y=2和z=3(x,y,z)=(1,2,3)或a=(x,y,z)=(1,2,3)#借助于元组实现x=1、y=2和z=3上式可以简写为:x,y,z=1,2,3#借助于元组实现x=1、y=2和z=34.1.4元组应用实例上述的“多变量”赋值,将把x、y和z约束为列表或元组的成员,可以直接使用这些变量,但如果给这些“变量”赋值时,实际上创建一个新的同名“变量”。因此,建议创建只读的“标签”时,可以使用上述的“多变量”赋值,其他情况不建议使用。“多变量”赋值作为“只读”的“标签”,这种情况最常用于是把元组作为函数的返回值,可以返回多个数据。4.1.4元组应用实例例:输入两个正整数,计算这两个整数的最大公约数和最小公倍数1defmygcdlcm(a,b):2ifa>b:3a,b=b,a4ifb==0:5return(b,a)6n=a*b4.1.4元组应用实例7whilea%b>0:8r=a%b9a=b10b=r11n=n//b12return(b,n)13if__name__=='__main__':14c=mygcdlcm(8,22)15print(c)4.1.4元组应用实例第1~12行为函数mygcdlcm,具有两个参数a和b,使用关键字“def”定义函数。第2~3行为一个if结构,判断如果a大于b,则将a与b互换。第4~5行为一个if结构,判断如果b为0,则输出元组(b,a),此时b为最大公约数,a为最小公倍数。第6行“n=a*b”将a与b的乘积赋给n。4.1.4元组应用实例第7~10行为一个while循环,这是求两个整数的最大公约数的Euclid算法,此算法依据Euclide定理,即a与b的最大公约数也是b与a%b的最大公约数。用gcd表示求最大公约数的函数,则gcd(a,b)=gcd(b,a%b)。一般地,将a与b中的较大者保存在a中,a与b中的较小者保存在b中,迭代公式(a,b)=(b,a%b)直到得到b能整除a,则b为a与b的最大公约数。这里的“(a,b)=(b,a%b)”表示将b赋给a,同时将a%b赋给b,运算前的a与b和运算后的a与b不占有相同的内存空间。4.1.4元组应用实例第11行“n=n//b”得到的n为a与b的最小公倍数。第12行“return(b,n)”返回元组,包含了a与b的最大公约数和最小公倍数。第14行“c=mygcdlcm(8,22)”调用函数mygcdlcm得到8与22的最大公约数和最小公倍数,函数返回值以元组的形式,赋给c。第15行“print(c)”输出c,得到“(2,88)”。02集合4.2集合Python语言中可定义集合这类数据类型。这里的“集合”是指数学集合论中的集合,即由一组无重复的无序元素组成的集合。在Python语言中,用花括号“{}”括起来且用逗号分隔的一组数据表示。集合中可以嵌套元组,但不能嵌套列表和另一个集合,这是因为集合的元素一定是确定的元素。集合中的元素没有顺序,无法通过索引号访问,集合元素的处理需要通过集合的内置方法实现。4.2.1集合定义集合由一组没有重复的无序元素组成,集合的特点在于其每个元素都是唯一的且确定的。集合中的元素可以取基本类型的常量,也可以取为元组,但不能为列表和集合。下面的程序段展示集合的定义方法。4.2.1集合定义1if__name__=='__main__':2a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}3print('Seta:',a)4b=list(a)5print('Listb:',b)6c=set()4.2.1集合定义7print('Emptyset:',c)8d=set([4,5,6,6,5])9print('Setd:',d)10e=set('anappletree')11print('Sete:',e)12print('Lengthofe:',len(e))4.2.1集合定义第2行“a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}”定义集合a,其中有重复的元素,在保存时,自动将所有重复的元素仅保留一个;第3行“print('Seta:',a)”输出集合a,得到“Seta:{1,2,2.71,(3,4),'天空','a','Python',(3+5j)}”,其中所有元素都是唯一的。第4行“b=list(a)”将集合a转化为列表b;第5行“print('Listb:',b)”输出列表b。注意,集合a转化为列表b时,列表b将采用当前的a的元素存储顺序。4.2.1集合定义第6行“c=set()”创建空集合c。由于集合和第4.3节的字典都使用花括号作为定界符,因此,一对空的“{}”将创建一个空字典,而非空集合,可能是因为Python设计人员认为字典比集合更重要。第7行“print('Emptyset:',c)”输出空集合c。第8行“d=set([4,5,6,6,5])”将一个列表转化为集合,赋给d。第9行“print('Setd:',d)”输出集合d。set是集合类的类名,可以将元组或列表转化为集合。4.2.1集合定义第10行“e=set('anappletree')”将字符串“anappletree”转化为集合,字符串中的每个字符作为集合的元素,并将重复的多个元素保留一个。第11行“print('Sete:',e)”输出集合e。第12行“print('Lengthofe:',len(e))”输出集合e的长度,即集合e的元素个数。4.2.1集合定义程序执行结果:集合中的元素可为整数、字符串、单个字符、元组等,也可以为浮点数和复数。使用内置函数len可以获得集合的元素个数,集合是可迭代的对象。模块zym0409执行结果4.2.2集合基本操作集合中的元素没有顺序,因此,集合中的元素没有索引号,无法通过索引号访问集合元素,只能将集合转化为列表或元组再按索引号访问各个元素。由于集合中的元素是可数的,集合也是可迭代对象,可以使用for结构遍历集合中的元素。集合的常用操作有三种,即集合的并集、交集和补集,后面表列出集合的常用操作,设全集为w={1,2,3,4,5,6,7,8,9,10},a={3,5,7,9},b={1,3,4,7,8,9}。4.2.2集合基本操作4.2.3集合内置方法使用指令“print(dir(set))”可以查看集合类set的内置公有方法。集合类内置公有方法:4.2.3集合内置方法4.2.3集合内置方法4.2.4集合应用实例现商场有一个抽奖游戏,箱子中有10张卡片,上面的数字为从1至10(无重复)。在商场消费后可有一次抽奖机会,从箱子中一次性取出3张卡片,将三张卡片上的数字相加,按其总和进行领奖,若总和在5至15(含)间为三等奖,总和在16至21(含)间为二等奖,总和在22至27(含)间为一等奖。程序段4-12模拟了这一抽奖过程。4.2.4集合应用实例1importrandom2if__name__=='__main__':3st=input('Begin(y/n)?')4whilest=='y':5points=set()6whilelen(points)<3:7x=random.randint(1,10)8points.add(x)4.2.4集合应用实例9s=sum(points)10if5<=s<=15:11print(f'sum={s}.Thethridprize.')12elif16<=s<=21:13print(f'sum={s}.Thesecondprize.')14else:15print(f'sum={s}.Congratulations.Thefirstprize.')16st=input('Tryagain(y/n)?')4.2.4集合应用实例程序执行结果:进行了5次抽奖实验,每次实验均给出了抽取到的3张卡片上的数字和。模块zym0412执行结果03字典4.3字典在Mathematica软件中,有一种数据类型,称为关联。关联有两部分组成,合称为“键—值对”,关联和Python语言中的“字典”数据类型相似。字典的键类似于集合只能取基本数据类型或元组。由于“键”用于访问其对应的“值”,“键”应取得简单、易记、可读性强,且不能重复。字典创建好后,其“键”不能修改,但是“键”对应的“值”可以修改。4.3.1字典定义字典的类型为dict类,每个字典数据为dict类定义的对象。简单地讲,字典是形如以下形式的数据表示:{键1:值1,键2:值2,键3:值3,……,键n:值n}字典中的所有“键”必须是唯一的,“键”只能为基本数据类型或元组(要求:元组帮为“键”时,元组的元素必须为确定性,而应尽可能具有易记和可读性强的特点。例如,如果“键”取为0、1、2、…,这样的字典和列表在功能上没有太大区别,因此,不是好的字典定义方式。4.3.1字典定义字典的定义方法:1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5}3print('d1=',d1)4d2={(1,2):'语文',(3,4):'数学',(5,6):'化学',(7,8):'物理'}5print('d2=',d2)6d3={}7print('Typeofd3:',type(d3))4.3.1字典定义8d4=dict(a=6,b=[5,4],c={3,2},d=(1,0),Else={'job':'student'})9print('d4=',d4)10d5=dict([('a',6),('b',[5,4]),('c',{3,2}),('d',(1,0)),('Else',{'job':'student'})])11print('d5=',d5)12d6={x:2*xforxin[4,5,6]}13print('d6=',d6)4.3.1字典定义14d7={x:2*xforxin(4,5,6)}15print('d7=',d7)16d8={x:d1[x]forxind1}17print('d8=',d8)18d9={'Tom':5,'Jerry':4,'Dog':6,'Jerry':5}19print('d9=',d9)4.3.1字典定义程序执行结果如下:模块zym0413执行结果4.3.2字典基本操作字典元素的访问方法有三种:(1)借助于“键”访问。如果字典对象为d,“键”名为“key”,则d['key']得到该“键”对应的“值”。该方式下,如果“键”不存在,将报错;(2)借助于字典内置的get方法访问。设字典对象为d,“键”名为“key”,则d.get('key')得到该“键”对应的“值”。该方式下,如果“键”不存在,则返回None;(3)在for循环中遍历字典元素。4.3.2字典基本操作借助于for循环遍历字典中的元素,也有三种方式,仍设字典对象为d,则三种方式依次为:(1)遍历字典中的“键”,如“foreind:”或“foreind.keys():”;(2)遍历字典中的“值”,如“foreind.values():”;(3)同时遍历字典中的“键值对”,如“foreind.items():”。4.3.2字典基本操作1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5,'Banana':5.2}3print(f"Apple'sprice:{d1['Apple']}.")4print(f"Apple'sprice:{d1.get('Apple')}.")5foreind1:6ife=='Apple':7print(f"{e}'sprice:{d1[e]}.")8foreind1.keys():4.3.2字典基本操作9ife=='Apple':10print(f"{e}'sprice:{d1[e]}.")11s=012foreind1.values():13s=s+e14print(f'Totalprice:{s}.')15foreind1.items():16print(e)17ife[0]=='Apple':4.3.2字典基本操作18print(f"{e[0]}'sprice:{e[1]}.")19d1['Apple']=7.820print('d1=',d1)21d1['Strawberry']=9.122print('d1=',d1)23ifd1.get('Watermelon')==None:24print('Nowatermelon.')25else:26print('Havewatermelon.')4.3.2字典基本操作程序执行结果:模块zym0414执行结果4.3.3字典内置方法与内置函数字典内置方法是指字典类中的公有方法,这类方法由字典调用;内置函数指Python语言的内置函数,可以作用于Python语言中的各种数据类型定义的对象。Python语言中常用于字典的内置函数如表所示。表中设字典为d。4.3.3字典内置方法与内置函数用于字典的内置函数:序号函数名含义实例1len统计字典中的元素个数(字典的一个“元素”是指一个“键值对”)len(d)返回d的元素个数2sum求字典的“键”或“值”的和(要求“键”和“值”必须为数值类型)sum(d)和sum(d.keys())含议相同,用于计算“键”的和;sum(d.values())用于计算“值”的和3type返回字典的类型type(d)返回“<class'dict'>”4.3.3字典内置方法与内置函数序号函数名含义实例4isinstance判断参数的类型isinstance(d,dict)返回True5str将字典转化为字符串str(d)返回一个字符串d6zip将多个列表或元组组合成一个以元组为元组的可迭代器,该迭代器的第i个元组的元素由各个列表或元组的第i个元素组成。只有组合了两个列表或元组的zip才能转化为字典foreinzip([1,2,3],(4,5,6),[7,8,9]):print(e)上述代码得到(1,4,7),(2,5,8),(3,6,9)当zip组合两个列表或元组时,可借助于dict将zip对象转化为字典,这是一种生成字典的快捷方法4.3.3字典内置方法与内置函数字典类内置公有方法序号方法名含义实例1get以字典的“键”为参数,返回字典中该“键”对应的“值”d.get('a')得到12values返回字典的全部“值”组成的对象,常需借助于list转化为列表list(d.values())得到[1,2,3]3keys返回字典的全部“键”组成的对象,常需借助于list转化为列表list(d.keys())得到['a','b','c']4items返回字典的全部元素组成的对象,每个元素为一个“键值对”,并将“键”和“值”组合为一个元组。常借助于list转化为列表list(d.items)得到[('a',1),('b',2),('c',3)]4.3.3字典内置方法与内置函数5setdefault以“键”和“值”作为参数,将两者组成的“键值对”添加到字典中,如果“值”省略,则将None作为该“键”的值d.setdefault('d',4),此后的d为{'a':1,'b':2,'c':3,'d':4}6update以一个字典作为参数,将该字典中的全部元素添加到调用该函数的字典中d.update({'d':4,'e':5}),执行后的d为{'a':1,'b':2,'c':3,'d':4,'e':5}7fromkeys第一个参数可以为列表、元组或集合,这个参数的每个元素将作为“键”;第二个参数指定这些“键”的值,这个参数将作为所有“键”的值。如果第二个参数省略,每个“键”的“值”将设为Nonee=dict.fromkeys(['a','b','c'],1),将得到字典e为{'a':1,'b':1,'c':1};而e=dict.fromkeys(['a','b','c']),将得到字典e为{'a':None,'b':None,'c':None}4.3.3字典内置方法与内置函数8copy将一个字典复制到另一个字典。这是一种“深”复制(或称“探”拷贝),即“深”复制后两个字典占有不同的存储空间,互不影响e=

d.copy()print(id(e))print(id(d))#d和e占不同内存e['a']=3print(d)print(e)#d和e互不影响这时,e与d内容相同,但e与d占有不同内存空间,故互不影响。对e修改后,不影响d9=对比copy,“=”是一种“浅”复制,即“浅”复制后两个字典共用一个存储空间,互相影响e=d#浅复制print(id(e))print(id(d))#d和e内存相同e['a']=3print(d)print(e)对e的“键”a赋值3,将同时影响到d,此时的d为{'a':3,'b':2,'c':3}4.3.3字典内置方法与内置函数10clear清空字典d.clear()后d为空字典“{}”11pop以字典的“键”为参数,删除该“键”对应的“值”,该“值”作为pop函数的返回值。如果“键”不存在,将报错print(d.pop('a'))#输出1print(d)#输出{'b':2,'c':3}12popitem删除字典中的最后一个元素,并将该元素转化为一个元组作为返回值print(d.popitem())#输出('c',3)print(d)#输出{'a':1,'b':2}4.3.4字典应用实例字典在处理具有多种属性的“对象”时具有优势,例如,要显示一个学生的基本信息,例如,姓名、年龄、性能和身高等,用字典比用列表更加方便。现有如表所示的几个学生信息,使用程序段对其进行存储和输出。姓名年龄性别爱好张飞18男篮球、唱歌关羽19男篮球、足球貂蝉17女绘画、跳舞4.3.4字典应用实例1if__name__=='__main__':2students={'张飞':{'年龄':18,'性别':'男','爱好':'篮球、唱歌'},3'关羽':{'年龄':19,'性别':'男','爱好':'篮球、足球'},4'貂蝉':{'年龄':17,'性别':'女','爱好':'绘画、跳舞'}}4.3.4字典应用实例6for(c1,c2)instudents.items():7print('姓名:'+c1,sep='')8age=str(c2['年龄'])9gender=c2['性别']10hobby=c2['爱好']11print(f'年龄:{age},性别:{gender},爱好:{hobby}')12print()4.3.4字典应用实例程序执行结果:模块zym0416执行结果04典型实例4.4典型实例程序=数据+算法。通过前述内容,可知Python语言具有高级的数据表示能力,其内置的列表、元组、集合和字典数据类型等,远远超过了其他计算机语言数据表示的能力。4.4典型实例字典与列表嵌套使用实例实例:包括以下两部分内容:(1)列表中嵌入字典:电子书日渐普及,方便了学生利用碎片化的时间阅读。这里首先为每本电子书创建一个字典,包括书名和作者;然后,创建一个列表包含所有电子书的字典;最后,通过列表输出各本电子书的信息。(2)字典中嵌入列表:下表列举了几位小朋友喜欢的菜名。4.4典型实例将表设计成一个字典,表中的每行为字典的一个元素。其中,每个元素的“值”用列表表示。最后,通过检索字典得到所有小朋友喜欢的菜品。姓名菜品名琳琳青椒炒肉、小鸡炖蘑菇朵朵西红柿炒蛋、回锅肉、素什锦丁丁蒜蓉炒虾、麻婆豆腐4.4典型实例1if__name__=='__main__':2book01={'bookname':'呐喊','author':'鲁迅'}3book02={'bookname':'边城','author':'沈从文'}4book03={'bookname':'活着','author':

温馨提示

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

评论

0/150

提交评论