Python3程序设计实战教程第3章 Python 常用数据结构_第1页
Python3程序设计实战教程第3章 Python 常用数据结构_第2页
Python3程序设计实战教程第3章 Python 常用数据结构_第3页
Python3程序设计实战教程第3章 Python 常用数据结构_第4页
Python3程序设计实战教程第3章 Python 常用数据结构_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

第3章Python常用数据结构

导入在编程中,最常见的工作就是将数据进行拆分或合并,将其加工为特定的形式,实现复杂数据的处理任务。在本章中,我们将学习Python常用的内置数据结构,并将之前所学的数据类型以更为复杂的方式组织起来。这些组合数据结构能够把多个同类型或不同类型的数据组织起来统一表示,使数据操作更有序、更容易。学习目标了解Python中的列表、元组、字符串、字典、集合等基本数据类型,了解它们的联系和特点;熟悉Python中列表、字典、集合的相关方法,以及个结构间的转换方法;掌握Python中的字符串、元组、列表、字典、集合的定义、创建,会使用切片方式访问有序序列的值,掌握常见的内建函数,重点掌握各数据结构的嵌套使用。主要内容Python常用数据结构概述列表(list)元组(tuple)字符串(str)与字节串(bytes)字典(dict)集合(set)各数据结构之间的转换3.1Python常用数据结构概述Python3的组合数据类型分别为:1、序列类型:序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,Python中常用的序列类型包括列表(list)、元组(tuple)、字符串(str)等。2、映射类型:映射类型是“键-值”数据项的组合,每个元素是一个键值对,表示为(key,value)Python中常用的映射类型是字典(map)。3、集合类型:集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在,Python中常用的集合类型是集合(set)。3.2列表(list)列表(list)是Python中最基本的数据结构。它由一系列按特定顺序的元素组成。你可以创建包含字母表中的所有字母或所有家庭成员姓名的列表;也可以将任何东西加入列表,其中的元素可以没有任何关系。创建一个列表后,可以访问、修改、添加或删除列表中的项目,即列表是可变的数据类型。【例3-1】使用方括号[]创建列表。>>>list0=[]#创建空列表list0>>>list0[]>>>list1=[1,2,3,4,5]#创建数字列表list1>>>list1[1,2,3,4,5]>>>list2=["C","Python","Java"]#创建字符串列表list2>>>list2['C','Python','Java']3.2.1列表的定义、创建与访问2、使用list()函数创建列表:Python还提供了一个内置的函数list(),可以将其它数据类型转换为列表类型。【例3-2】使用list()函数创建列表>>>list0=list()#创建空列表list0>>>list0[]>>>list1=list(range(1,6))#将区间转换成数字列表list1>>>list1[1,2,3,4,5]>>>list2=list("Python")#将字符串转换成字符列表list2>>>list2['P','y','t','h','o','n']3.2.1列表的定义、创建与访问列表是有序集合,如果要访问列表的任何元素,只需将该元素的位置或者索引告诉Python即可,列表的索引体系有正向和反向两种,两套体系的索引编号可以任意搭配使用。如图所示:列表类型的索引体系【例3-4】列表的正向索引体系>>>list3[0]#输出列表第一个元素使用索引0aaa>>>list3[1]#输出列表第二个元素使用索引1bbb3.2.1列表的定义、创建与访问当不知道列表到底有多少个元素,应该怎样找到该列表的最后一个元素呢?把索引值设置为-1时,Python就会输出最后一个列表元素。而且这种约定也适用于其他负数索引,比如索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。【例3-5】列表的反向索引体系>>>list3[-1]#输出列表最后一个元素使用索引-1ddd>>>list3[-2]ccc>>>list3[-3]bbb3.2.2列表的分片、修改与删除1、列表的分片:在Python中处理列表的部分元素,称之为分片。创建分片,可指定要使用的第一个元素和最后一个元素的索引。字符串、列表、元组都支持分片操作。分片的语法:[起始:结束:步长]注意:选取的区间属于左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)。【例3-6】列表的分片>>>list3=['aaa','bbb','ccc','ddd']>>>list3[1:4]['bbb','ccc','ddd']>>>list1=[1,2,3,4,5,6]>>>list1[0:-1:1]#从位置0开始到结束-1,步长1,不包含结束位置[1,2,3,4,5]>>>list1[:3]#省略起始位置的索引及步长,默认起始位置从头开始,默认步长为1,结束位置索引为3[1,2,3]>>>list1[0:5:3]#从第一个位置到第6个位置,每3个取一个值[1,4]3.2.2列表的分片、修改与删除【例3-7】使用分片实现列表反转list3=['aaa','bbb','ccc','ddd']>>>list3[::-1]['ddd','ccc','bbb','aaa']#使用逆序切片反转列表>>>list3['aaa','bbb','ccc','ddd']#列表顺序不变还可以使用reverse()方法反转列表元素。【例3-8】使用reverse()方法反转列表>>>list3['aaa','bbb','ccc','ddd']>>>list3.reverse()#使用reverse()方法反转列表>>>list3['ddd','ccc','bbb','aaa']]#列表顺序永久改变方法reverse()是永久的反转列表元素,但如果要恢复要原来的排列顺序,则需要再次调用reverse()方法,而分片则是将列表反转输出,但列表顺序不变。3.2.2列表的分片、修改与删除2、应用列表时可以在列表中添加新元素,列表添加元素的方法有3种。(1)使用append()方法在列表末尾添加元素。【例3-9】使用append()方法添加元素>>>list3=['aaa','bbb','ccc','ddd']>>>list3['aaa','bbb','ccc','ddd']>>>list3.append('eee')#使用append()方法在列表末尾添加元素’eee’>>>list3['aaa','bbb','ccc','ddd','eee']这是最简单的更新列表方式,用append()方法将新元素‘eee’添加到列表末尾,而不影响列表中其它元素。3.2.2列表的分片、修改与删除(2)使用insert()方法在列表任意位置插入元素。【例3-10】使用insert()方法插入元素>>>list3=['aaa','bbb','ccc','ddd']>>>list3['aaa','bbb','ccc','ddd']>>>list3.insert(0,'zzz')#使用insert()方法在列表0号索引位置添加元素‘zzz’>>>list3['zzz','aaa','bbb','ccc','ddd']在这个例子中,值’zzz’被插入到了列表的开头;方法insert()有两个参数,一个为你要插入位置的索引值,另一个是要插入元素的值。这种操作将列表中既有的每个元素都右移一个位置。append()方法只能在列表末尾插入元素,insert()方法可以列表中间任意位置插入元素。3.2.2列表的分片、修改与删除(3)使用extend()方法批量添加元素在上面我们知道了怎么在列表中添加元素,同样,使用extend()方法可以在列表中添加一个列表,达到批量添加元素的目的。【例3-11】使用extend()方法批量添加元素>>>list3=['aaa','bbb','ccc','ddd']>>>list4=['eee','fff']>>>list3.extend(list4)#使用extend()方法批量添加元素>>>list3['aaa','bbb','ccc','ddd','eee','fff']3.2.2列表的分片、修改与删除使用pop()方法删除元素:使用pop()方法可以获取列表中指定位置的元素,在获取后,该元素会被自动删除,如果为pop()方法指定了索引,他会返回对应索引置的元素;如果不指定位置,则默认使用-1。因此,pop(0)将返回列表的头元素,pop()或pop(-1)则会返回列表的尾元素。【例3-14】使用pop()方法删除列表元素>>>list3=['aaa','bbb','ccc','ddd']>>>list3['aaa','bbb','ccc','ddd']>>>x=list3.pop()#使用pop()方法删除尾元素>>>x'ddd'#pop()方法默认返回尾元素值>>>list3#列表尾元素被删除['aaa','bbb','ccc']>>>list3=['aaa','bbb','ccc','ddd']>>>y=list3.pop(0)#使用pop(0)方法删除头元素>>>y'aaa'#pop(0)方法返回指定索引位置的元素值>>>list3['bbb','ccc','ddd']3.2.2列表的分片、修改与删除(2)根据元素本身的值进行删除,可使用列表提供的remove()方法:有时候,我们不知道从列表中删除值所在的位置,只知道要删除元素的值,可使用方法remove()实现删除该元素操作。【例3-15】使用remove()方法删除列表元素>>>list3=['aaa','bbb','ccc','ddd']>>>list3['aaa','bbb','ccc','ddd']>>>list3.remove('aaa')#使用remove(‘aaa’)方法删除‘aaa’元素>>>list3['bbb','ccc','ddd']remove()方法只能删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要用循环来多次删除所有这样的值。3.2.2列表的分片、修改与删除(3)将列表中所有元素全部删除,可使用列表(list类型)提供的clear()方法,即清空列表。【例3-16】使用clear()方法清空列表元素>>>list3=['aaa','bbb','ccc','ddd']>>>list3['aaa','bbb','ccc','ddd']>>>list3.clear()#使用clear()方法清空列表>>>list3[]3.2.3列表运算1、比较运算列表中有单个元素时,直接比较相对应的元素大小即可【例3-17】单元素列表比较>>>list1=[123]>>>list2=[456]>>>list1>list2#直接比较元素大小False如果列表中有多个元素:首先从列表中的第0个位置的元素相比较大小,如果哪个列表的第0个位置的元素大,就认为该列表大,如果相等的话就一直比较下去,直到有一项大,就认为该列表大。【例3-18】多元素列表比较>>>list1=[123,456]>>>list2=[123,567]>>>list3=[123,456]>>>list1>list2False>>>list1==list3>>>True3.2.3列表运算2、连接运算【例3-19】使用“+”连接列表>>>list1=[123,456]>>>list2=[567,890]>>>list4=list1+list2>>>list4>>>[123,456,567,890]【例3-21】使用“+=”连接列表>>>list1=[123,456]>>>list2=[567,890]>>>list1+=list2#使用+=运算符实现批量添加元素>>>list1[123,456,567,890]【例3-22】使用“*”用于重复列表中的元素。>>>list1=[123,456]>>>list1*3[123,456,123,456,123,456]3.2.4列表函数1、len(list):返回列表元素个数,【例3-23】len()函数>>>list1=[123,456]>>>len(list1)2>>>len(['a','b','c'])32、max(list):返回列表元素最大值【例3-24】Max()函数>>>list1=[123,456]>>>max(list1)456>>>max([1,2,3,4,5])53.2.4列表函数3、min(list):返回列表元素最小值【例3-25】Min()函数>>>list1=[123,456]>>>min(list1)123>>>min([1,2,3,4,5])14、list(str):将字符串转换为列表【例3-26】list()函数>>>list('Python')['P','y','t','h','o','n']5、使用sorted()函数对列表进行排序【例3-27】sorted()函数>>>list1=[1,2,4,5,3]>>>print(sorted(list1))#使用sorted()函数对列表进行排序,返回新列表[1,2,3,4,5]>>>list1#使用sorted()函数对列表排序,原列表值不变

[1,2,4,5,3]3.2.5列表方法1、使用sort()方法对列表排序列表被创建时,里面的元素往往是乱的,没有任何顺序,当需要以特定的顺序呈现列表的元素时,就需要对列表进行排序处理。【例3-28】使用sort()方法为列表排序>>>list4=['aaa','eee','ddd','ccc','bbb']>>>list4.sort()#使用sort()方法对字符串列表排序>>>list4['aaa','bbb','ccc','ddd','eee']sort()方法是按字母顺序与数字顺序对列表元素进行排序,我们也可以按照与字母或者数字相反的顺序排列元素,我们只需要向sort()方法传递参数reverse=True。【例3-29】使用sort()方法为列表逆向排序7>>>list4=['aaa','eee','ddd','ccc','bbb']>>>list4.sort(reverse=True)#传递参数reverse=True实现列表逆序排序>>>list4['eee','ddd','ccc','bbb','aaa']3.2.5列表方法sort()和sorted()虽然相似,都可以实现排序功能,但是它们有很大的不同:(1)sort()是应用在list上的方法,sorted()可以对所有可迭代的对象进行排序操作。(2)list的sort()方法是对已经存在的列表进行操作,无返回值,而内建函数sorted()方法返回的是一个新的list,而不是在原来的基础上进行的操作。3.2.5列表方法2、count()方法统计某个元素在列表中出现的次数【例3-30】使用count()方法统计列表中某元素个数>>>list3=['aaa','bbb','ccc','ddd',’aaa’]>>>list3.count('aaa')2>>>list3.count('eee')03、index()方法可以查询元素的位置【例3-31】使用index()方法查询列表元素位置>>>list3=['aaa','bbb','ccc','ddd']>>>list3.index('ccc')24、copy()方法可以复制列表【例3-32】使用copy()方法复制列表>>>list3=['aaa','bbb','ccc','ddd']>>>list4=list3.copy()>>>list4['aaa','bbb','ccc','ddd']3.3元组(tuple)元组(tuple)是一组有序系列,包含0个或多个对象引用。Python3中元组采用圆括号中用逗号分隔的定义方式,圆括号可以省略。【例3-33】使用圆括号定义元组>>>t0=()#定义空元组>>>t1=(1,)#定义单元素元素>>>t2=(1,2,3,4)>>>t3=1,2,3,4#圆括号可以省略>>>print(t0,t1,t2,t3)()(1,)(1,2,3,4)(1,2,3,4)当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,python在显示只有1个元素的tuple时,也会加一个逗号,以免你误解成数学计算意义上的括号。3.3.1元组与列表的异同Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组是固定且不可改变的。一旦元组被创建,和列表不同,它的内容无法被修改或它的大小也无法被改变。【例3-34】使用圆括号定义元组>>>t=(1,2,3,4)>>>t[0]=5Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:'tuple'objectdoesnotsupportitemassignment虽然和列表类似,但是因为元组创建后无法修改,所以元组没有append(),insert()这样的方法,所以相对来说元组的内置函数就比较少。3.3.2元组的操作元组支持序列系列的基本操作,包括索引访问、切片操作、连接操作,比较运算操作,以及求元组长度、最大值、最小值等。1、使用下标索引访问元组,与列表类似。【例3-35】使用索引访问元组元素>>>t1=(1,2,3,4,5,6)>>>t2=('aaa','bbb','ccc','ddd')>>>t1[2:5](3,4,5)>>>t2[0]'aaa'3.3.2元组的操作2、元组中的元素值是不允许修改的,但我们可以对元组进行连接组合。【例3-36】元组的连接组合>>>t1=(1,2,3,4,5,6)>>>t2=('aaa','bbb','ccc','ddd')>>>t3=t1+t2>>>t3(1,2,3,4,5,6,'aaa','bbb','ccc','ddd')3、计算元组的长度。【例3-37】使用len()函数计算元组长度len(tuple)>>>t1=(1,2,3,4,5,6)>>>len(t1)63.3.2元组的操作4、返回元组中的最大值最小值。【例3-38】使用max()、min()函数返回元组最大、最小值>>>t1=(1,2,3,4,5,6)>>>max(t1),min(t1)(6,1)5、将列表转换为元组。【例3-39】使用tuple()函数将列表转换为元组tuple(seq)list1=[1,2,3,4,5,6]>>>t2=tuple(list1)>>>t2(1,2,3,4,5,6)3.4字符串(str)与字节串(bytes)字符串也是序列数据结构的一种,与列表和元组一样,其中的元素带索引,索引从0开始,要访问字符串的一部分,可以使用索引完成切片操作,字符串索引序号和列表一致。Python3访问子字符串,可以使用方括号[]来截取字符串,字符串的截取的语法格式与元组相似:语法:变量[起始:结束:步长]【例3-40】字符串的截取>>>str1="Python">>>str1[0]'P'>>>str1[1]'y'>>>str1[:3]'Pyt'>>>str1[3:6]'hon'3.4.2字符串的截取由于Python中不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为1的字符串。也就是说,对于一个非空字符串s,s[0]==s[0:1]。【例3-41】单元素字符串>>>str1="Python">>>str1[0]'P'>>>str1[0:1]'P'>>>str1[0]==str1[0:1]True3.4.3字符串方法Python3.x全面支持中文,中文和英文字母都作为一个字符对待,甚至可以使用中文作为变量名。除了支持使用加号运算符连接字符串以外,Python字符串还提供了大量的方法支持格式化、查找、替换、排版等操作。【例3-42】字符串常用方法>>>str2='hello'>>>str2.capitalize()#首字母大写'Hello'>>>'好好学习'.center(30,'*')#指定宽度并居中'*************好好学习*************'>>>'123'.zfill(30)#指定宽度并填充0'000000000000000000000000000123'>>>str3='好好学习天天向上'>>>str3.index('学')#返回指定字符元素索引2>>>str3.count('好')#统计指定字符元素个数2>>>3.4.4.字节串(bytes)字节串是字节序列,它可以直接存储在硬盘,给计算机传输或者保存,字节串和字符串有本质的区别,字符串是字符序列,它是一种抽象的概念,不能直接存储或传输,仅供人类交流使用,字节串可以看成是计算机设备之间的交流编码。字符串与字节串之间的映射被称为编码/解码,对str类型的字符串调用其encode()方法进行编码得到bytes字节串,对bytes字节串调用其decode()方法并指定正确的编码格式则得到str字符串。【例3-43】字符串与字节串的编码与解码>>>x='大学'#字符串>>>type(x)#默认字符串类型为str<class'str'>>>>x.encode()#默认使用utf8编码格式进行编码b'\xe5\xa4\xa7\xe5\xad\xa6'>>>type(x.encode())#数据类型<class'bytes'>#字节串3.4.4.字节串(bytes)>>>type('Helloworld')#默认字符串类型为str<class'str'>>>>type(b'Helloworld')#在定界符前加上字母b表示字节串<class'bytes'>>>>'Helloworld'.encode('utf8')#使用utf8编码格式进行编码b'Helloworld'>>>>>>'理工大学'.encode('utf8')#对中文进行编码b'\xe7\x90\x86\xe5\xb7\xa5\xe5\xa4\xa7\xe5\xad\xa6'>>>b'\xe7\x90\x86\xe5\xb7\xa5\xe5\xa4\xa7\xe5\xad\xa6'.decode()'理工大学'>>>'理工大学'.encode('gbk')b'\xc0\xed\xb9\xa4\xb4\xf3\xd1\xa7'>>>b'\xc0\xed\xb9\xa4\xb4\xf3\xd1\xa7.decode('gbk')#对bytes字节串进行解码'理工大学'3.5字典(dict)字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,字典的值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组(列表这样的可变类型不能作为键)。字典根据键可以查询到值。在Python中,字典是一组键/值对的数据结构。每个键都与一个值相关联,我们可以使用键来访问与之相关联的值。但是键与键之间不能重复。与键相关联的值可以是数字、字符串、列表或任何Python对象。在Python中,字典用放在花括号{}中的一系列键\值对表示:student={'name':'zhangsan','age':20}键/值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键\值对之间用逗号分隔。在字典中,我们想存储多少个键/值对都可以。字典定义形式如下:{键1:值1,[键2:值2,……键n:值n]}3.5.1创建字典字典也可以通过创建dict对象来创建。其基本形式如下:dict()#创建一个空字典dict(**kwargs)#使用关键字参数,创建一个新字典dict(mapping)#从一个字典对象创建一个新字典dict(iterable)#使用可迭代对象创建一个新字典【例3-44】创建新字典>>>dict0={}#使用花括号创建一个空字典>>>dict0{}dict1={'one':1,'two':2,'three':3}#使用花括号键/值创建字典>>>dict1{'one':1,'two':2,'three':3}>>>dictstu=dict(name='张三',age=20)#使用关键字参数,创建字典>>>dictstu{'name':'张三','age':20}3.5.1创建字典>>>dict2=dict({'Mar':'三月','Jan':'一月','Feb':'二月'})#从一个字典对象创建一个新字典>>>dict2{'Mar':'三月','Jan':'一月','Feb':'二月'}>>>dict3=dict([('Feb','二月'),('Jan','一月'),('Mar','三月')])>>>dict3{'Feb':'二月','Jan':'一月','Mar':'三月'}#使用可迭代对象创建一个新字典>>>dict3==dict2#dict3和dict2数据项顺序并不一样,但是并不影响它们对比。True3.5.2字典操作为了避免上述异常,在访问字典的时候,首先需要检查某个键是否存在于字典中时,可以使用get()方法,还可以设置默认值:【例3-46】使用get()方法检查字典中是否存在元素,若无该元素默认返回None>>>dict1={'one':1,'two':2,'three':3}>>>dict1.get('four')#使用get()方法检查元素是否存在>>>print(dict1.get('four'))None>>>dict1={'one':1,'two':2,'three':3}>>>dict1.get('two')#当要找的键存在时,get()方法可以返回字典元素值23.5.2字典操作2、更新字典中的元素:字典是可变对象,支持对元素的更新操作,在字典中添加新元素时,如果要添加的键已经存在,那么字典中该键对应的值会被新值替代。【例3-47】更新字典中的元素>>>dict3={'一月':'Jan','二月':'Feb','三月':'Mar'}>>>dict3['三月']='March'#更新字典元素值>>>dict3{'一月':'Jan','二月':'Feb','三月':'March'}>>>dict3['四月']='April'#往字典中添加新元素>>>dict3{'一月':'Jan','二月':'Feb','三月':'March','四月':'April'}>>>3.5.2字典操作3、删除字典和字典元素:对字典执行删除操作,可是使用del命令实现,del命令既能删除字典元素,又能删除整个字典。【例3-48】字典的删除操作>>>dict3{'一月':'Jan','二月':'Feb','三月':'March','四月':'April'}>>>deldict3['四月']>>>dict3{'一月':'Jan','二月':'Feb','三月':'March'}>>>>>>deldict3#删除整个字典>>>dict3#报错提示字典dict3不存在Traceback(mostrecentcalllast):File"<pyshell#99>",line1,in<module>dict33.5.2字典操作使用del命令删除整个字典后,字典所在内存会被释放,如果再访问字典dict3,会报错提示字典dict3不存在。删除整个字典的操作须谨慎使用。如果想要保留字典占用内存空间,可以使用clear()方法清除所有元素,得到一个空的字典。【例3-48】字典的清空操作>>>dict3={'二月':'Feb','一月':'Jan','三月':'Mar'}>>>dict3.clear()>>>dict3{}>>>3.5.3字典方法字典的常用内建方法方法名相关描述clear()删除字典中的所有元素copy()返回字典的一个浅复制fromkeys(seq[,value])创建一个新的字典,设置seq中的元素为字典的键,设置value为字典中所有键对应的初始值。如果不提供此值,则默认为Noneget(key[,default])通过字典中的键,获取其对应的值。如果字典中不存在此键,则返回default的值。注意,default的默认值为Noneitems()返回字典的元素视图pop(key[,default])如果字典中的键存在,删除并返回其对应的值;如果字典中的键不存在,且没有给出default的值,则会引发KeyError异常popitem()随机删除字典中的一个键值对,并返回这个键/值对setdefault(key[,default])如果字典中不存在key,则会使用dictkey)=default为它赋值update([other])把other中的键值对添加到字典中values()返回字典的值视图3.5.3字典方法1、copy()方法:用于返回一个有着相同键值对的字典。【例3-49】使用copy()方法实现字典的复制>>>dict1={'one':1,'two':2,'three':3}>>>dictcpy=dict1.copy()>>>dictcpy{'one':1,'two':2,'three':3}2、items()方法:用于返回字典的元素视图。元素视图会一直与字典保持同步,当字典发生变化时,可以实时地反映出字典中元素的变化。【例3-50】使用items()方法返回字典元素视图>>>dict1={'one':1,'two':2,'three':3}>>>dict1.items()dict_items([('one',1),('two',2),('three',3)])>>>3.5.3字典方法3、keys()方法:用于返回字典的键视图,该视图会一直与字典保持同步,当字典发生变化时,可以实时地反映出字典中键的变化。【例3-51】使用keys()方法返回字典键视图>>>dict1={'one':1,'two':2,'three':3}>>>dict1.keys()dict_keys(['one','two','three'])>>>4、values()方法:用于返回字典的值视图,该视图会一直与字典保持同步,当字典发生变化时,可以实时地反映出字典中值的变化。【例3-52】使用values()方法返回字典值视图>>>dict1={'one':1,'two':2,'three':3}>>>dict1.values()dict_values([1,2,3])>>>3.6集合(set)集合就像舍弃了值,仅剩下键的字典一样,键与键之间也不允许重复。如果仅仅想知道一个元素是否存在而不关心其他的,使用集合是个非常好的选择。集合特性是:大括号组织起来,元素唯一,元素无序。Python3有两种内置的集合类型:set(可变集合)和frozenset(不可变集合),它们的区别如下:1、set集合可变的集合类型,能够对集合的元素进行更改。由于set集合是可变的,所以它没有哈希值,不能用作字典的键或作为另一个集合的元素。2、frozenset集合不可变集合类型,集合的内容在创建以后不能被更改,所以它可以用作字典的键,或者作为另一个集合的元素。Python3中提供了set()函数用于创建可变集合对象,frozenset()函数用于创建不可变集合的对象。3.6集合(set)这两个函数语法格式如下:set([iterable])frozenset([iterable])【例3-53】创建集合>>>set1=set(‘Python’)#通过set()函数创建字符型集合>>>set2={1,2,3,4,5,6}#通过普通方法创建集合>>>fset1=frozenset([1,2,3,4,5,6])#通过frozenset()函数创建集合>>>set1{'o','n','y','t','P','h'}#集合元素无顺序>>>set2{1,2,3,4,5,6}>>>fset1frozenset({1,2,3,4,5,6})3.6.2集合的操作(可变集合)3、删除集合元素:可以通过调用remove()、discard()、pop()或clear()4种方法实现,其中remove()和discard()方法用于删除指定元素,pop()方法用于删除第一个元素,而clear()方法用于删除集合所有元素。例如【例3-57】删除集合元素>>>set1={'one',2,3,4,'five',6}>>>set1.remove('five')#使用remove()方法删除元素>>>set1{'one',2,3,4,6}>>>set1{'one',2,3,4,6}>>>element=set1.pop()#使用pop()方法随机删除一个元素并返回>>>element'one'>>>set1{2,3,4,6}>>>3.6.3集合的运算除了常用的基本操作之外,集合还可以使用集合运算符进行操作处理,Python3中的集合支持使用标准类型的操作符,包括成员操作符(in或notin)、等价操作符(==或!=)和比较运算符(>、<、>=、<=)下面对它们进行介绍1、成员操作符与其它类型一样,in或notin操作符用于判断某个值是或者不是集合的元素。【例3-59】集合的成员操作符>>>set1={1,2,3,4,5,6}>>>9inset1#判断集合中是否有某个元素False>>>3inset1True>>>'one'notinset1#判断某个元素不是集合成员True>>>3.6.3集合的运算2、等价操作符==和!=操作符用于比较两个相同或者不同的集合。等价是指一个集合的每个元素同时又是另外一个集合中的元素,这种比较跟集合的类型和元素顺序无关,只是与集合的元素有关。【例3-60】集合的等价操作符>>>set2=set('Java')>>>set3=set('Python')>>>set2!=set3#!=操作符判断两个集合不同True>>>set2=set('who')>>>set3=set('how')>>>set2==set3#==操作符判断连个集合相同True#两个集合相同与元素顺序无关3.6.3集合的运算3、比较运算符操作符实例说明<

A<B如果集合A是集合B的真子集返回True,反之返回False<=A<=B如果集合A是集合B的子集返回True,反之返回False>

A>B如果集合A是集合B的真超集返回True,反之返回False>=A>=B如果集合A是集合B的真超集返回True,反之返回False3.6.3集合的运算3、比较运算符【例3-61】集合的比较运算符>>>set2=set('Python')>>>set3=set('PythonandJava')>>>set2{'o','n','y','t','P','h'}>>>set3{'o','n','d','v','y','a','J','t','P','','h'}>>>set2<set3True>>>set3>=set2True3.6.3集合的运算3、集合类型操作符Python3中集合之间支持联合(|)、交集(&)差补(-)和对称差分(^)的操作。操作符实例说明|A|B计算集合A与集合B进行并集&A&B计算集合A与集合B进行交集-A-B计算集合A与集合B进行差集^A^B计算集合A与集合B进行计算对称差分3.6.3集合的运算3、集合类型操作符(1)联合(|)联合类似于数学集合中的并集操作,把所有属于集合A或集合B的元素组成一个新的集合,这个新集合的每个元素至少是A或B的元素。【例3-62】集合的联合运算>>>set1={1,2,3,4,5,6}>>>set2=set('Python')>>>set1|set2#set1与set2联合运算合并两个集合{1,2,3,4,5,6,'o','n','y','t','P','h'}3.6.3集合的运算3、集合类型操作符(2)交集(&)交集就是把属于集合A且属于集合B的元素组成一个新集合,这个新集合的每个元素同时就是A和B两个集合的元素。【例3-63】集合的交集运算>>>set2=set('Python')>>>set3=set('PythonandJava')>>>set2&set3{'o','n','y','P','t','h'}>>>3.6.3集合的运算3、集合类型操作符(3)差集(-)差集就是指新集合中的元素值属于集合A或集合B。【例3-64】集合的差集运算>>>set1={1,2,3,4,5,6}>>>set3={2,3,4,5,6,7}>>>set1-set3{1}>>>set3-set1{7}3.6.3集合的运算3、集合类型操作符(4)对称差分(^)对称差分是指只把属于集合A或者集合B且不能同时属于两个集合的元素组成一个新集合,这个新集合的每个元素只能是A或B中的元素。【例3-65】集合的对称差分>>>set1={1,2,3,4,5,6}>>>set3={2,3,4,5,6,7}>>>set1^set3{1,7}>>>3.6.4集合的方法Python为集合提供了一些非常实用的内建方法,可以使用这些方法来简化开发步骤方法名相关描述union()返回两个集合的并集update()给集合添加元素intersection()返回集合的交集intersection_update()返回集合的交集。difference()返回多个集合的差集difference_update()移除集合中的元素,该元素在指定的集合也存在。symmetric_difference()返回两个集合中不重复的元素集合。symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。isdisjoint()判断两个集合是否包含相同的元素,如果没有返回True,否则返回False。issubset()判断指定集合是否为该方法参数集合的子集。issuperset()判断该方法的参数集合是否为指定集合的子集add()为集合添加元素clear()移除集合中的所有元素copy()拷贝一个集合discard()删除集合中指定的元素pop()随机移除元素remove()移除指定元素3.6.4集合的方法1、union()方法相当于并集。【例3-66】使用union()方法实现并集>>>set1={1,2,3,4,5,6}>>>set2=set('Python')>>>set1.union(set2)#使用方法union()合并集合set2{1,2,3,4,5,6,'o','n','y','t','P','h'}>>>set1#set1集合元素未改变{1,2,3,4,5,6}3.6.4集合的方法2、update()方法相当于并集,并更新集合。【例3-67】使用update()方法实现并集>>>set1={1,2,3,4,5,6}>>>set2=set('Python')>>>set1.update(set2)#使用方法update()添加集合set2>>>set1#set1集合元素改变{1,2,3,4,5,6,'o','n','y','t','P','h'}3.6.4集合的方法3、intersection()方法相当于交集。【例3-68】使用intersection()方法实现交集运算>>>set2=set('Python')>>>set3=set('PythonandJava')>>>ersection(set2){'o','n','y','P','t','h'}>>>set3#set3集合元素未改变{'o','n','d','v','y','a','J','t','P','','h'}3.6.4集合的方法4、intersection_update()方法相当于交集,并更新集合。【例3-69】使用intersection_update()方法实现交集运算,并更新集合>>>set2=set('Python')>>>set3=set('PythonandJava')>>>ersection_update(set2)>>>set3#set3集合元素改变{'o','n','y','P','t','h'}>>>3.6.4集合的方法5、difference()方法相当于差集。【例3-70】使用difference()方法实现差集>>>set1={1,2,3,4,5,6}>>>set3={2,3,4,5,6,7}>>>set1.difference(set3)#实现set1-set3差集{1}>>>set3.difference(set1)#实现set3-set1差集{7}>>>set1{1,2,3,4,5,6}#set1集合元素未改变>>>set3{2,3,4,5,6,7}#set3集合元素未改变>>>3.6.4集合的方法6、difference_update()方法相当于差集,并更新集合。【例3-71】使用difference_update()方法实现差集并更新集合>>>set1={1,2,3,4,5,6}>>>set3={2,3,4,5,6,7}>>>set1.difference_update(set3)#实现set1-set3差集>>>set1#set1集合元素改变{1}7、symmetric_difference()方法相当于对称差分。【例3-72】使

温馨提示

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

评论

0/150

提交评论