Python程序设计基础及应用(微课版)课件 -第5章 容器类型_第1页
Python程序设计基础及应用(微课版)课件 -第5章 容器类型_第2页
Python程序设计基础及应用(微课版)课件 -第5章 容器类型_第3页
Python程序设计基础及应用(微课版)课件 -第5章 容器类型_第4页
Python程序设计基础及应用(微课版)课件 -第5章 容器类型_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

《Python程序设计基础及应用》配套课件第五章

容器类型5.1

列表list5.2元组tuple5.3

字典dict5.4集合5.5元组封装与序列拆封【学习目标】

掌握元组、列表、字典、集合等容器类型的特点和常用方法

能够根据需要合理选择容器类型,并能够灵活使用

能够运用本章知识来解决数据处理的实际问题,提高编程效率和代码质量5.1列表1.列表概述

列表是Python内置的有序、可变序列,列表的所有元素放在一对中括号“[]”中,

并使用逗号分隔开

当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有

缝隙Python中,列表中的数据类型可以各不相同,可以同时为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象Python中列表存放的元素是值的引用,并不直接存储值,列表类似于其它语言的数

组。需要注意的是,列表的功能虽然非常强大,但是负担也比较重,开销较大,要

尽量避免过多使用列表【实例:合法列表对象】[10,20,30,40]['crunchyfrog','rambladder','larkvomit']['spam',2.0,5,[10,20]][['file1',200,7],['file2',260,9]]1.列表概述将列表元素放在一对方括号[

]内,以逗号分隔,然后赋值给变量,即可创建列表my_list1=[1,2,3,4,5]使用list()函数将元组、range对象、字符串或其他类型的可迭代对象转换为列表my_list2=list((1,2,3,'a','b'))#元组转化为列表my_list3=list("abc") #字符串转化为列表2.列表的创建和元素访问创建列表之后,就可以使用整数作为索引号来访问其中的元素2.列表的创建和元素访问如果尝试访问一个不存在的索引(即索引越界),Python会抛出一个IndexError异常2.列表的创建和元素访问my_list=['apple','banana','cherry','date'] #创建一个含有四个字符串元素的列表#使用正向索引访问列表元素print(my_list[0]) #输出:apple(访问第一个元素)print(my_list[1]) #输出:banana(访问第二个元素)#使用反向索引访问列表元素print(my_list[-1]) #输出:date(访问最后一个元素)print(my_list[-2]) #输出:cherry(访问倒数第二个元素)#访问不存在的索引print(my_list[4]) #列表只有4个元素,却要访问第5个元素,触发IndexError异常3.列表的赋值与拷贝1)使用赋值符“=”在Python中,对象赋值实际上是拷贝对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。如果原始列表改变,被赋值的对象也会做相同的改变。>>>a=[1,2,"hello",["welcome","world"]]>>>b=a #变量b复制a的对象引用>>>a[2]="xi'an" #修改列表内容>>>b[1,2,"xi'an",['welcome','world']] #修改列表内容3.列表的赋值与拷贝2)浅拷贝(shadowcopy)---copy()方法浅拷贝会创建新对象,其内容是原对象的引用。如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据,一般是没有问题的(不会影响)。如果原列表中包含列表、字典、集合等可变数据类型,由于浅拷贝时只是把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个。3.列表的赋值与拷贝【实例:测试浅拷贝】>>>a=[1,2,3,"welcome",["C","Java","PHP"]]>>>b=a.copy() #生成a的浅拷贝>>>aisb #浅拷贝产生一个新对象False>>>a[3]="hello"#修改a中的元素>>>a[1,2,3,'hello',['C','Java','PHP']]>>>b[1,2,3,'welcome',['C','Java','PHP’]]>>>a[4].append("Python")>>>a[1,2,3,'hello',['C','Java','PHP','Python']]>>>b[1,2,3,'welcome',['C','Java','PHP','Python']]3.列表的赋值与拷贝3)深拷贝---copy.deepcopy()深拷贝需要拷贝多层,同时产生一个新的对象。原始对象的改变不会造成深拷贝里任何子元素的改变。使用copy模块中的deepcopy()函数,使用前需要先导入copy模块。3.列表的赋值与拷贝【实例:测试深拷贝】>>>importcopy>>>a=[1,2,3,"welcome",["C","Java","PHP"]]>>>b=copy.deepcopy(a)>>>aisbFalse>>>a[4].append("Python")>>>a[1,2,3,'welcome',['C','Java','PHP','Python']]>>>b[1,2,3,'welcome',['C','Java','PHP']]4.列表元素的增加列表元素的添加可以使用append()、extend()和insert(),或者使用“+”运算符。除了“+”运算符外,其它几个方法都属于原地操作(列表地址不变)。append()方法通过append()方法在当前列表尾部追加元素,是原地修改列表,速度较快。extend()方法使用列表对象的extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。通过extend()方法来增加列表元素也不改变其内存首地址,属于原地操作。insert(index,x)方法使用列表对象的insert(index,x)方法可以将元素添加至列表的指定位置。4.列表元素的增加列表元素的添加可以使用append()、extend()和insert(),或者使用+、*运算符。除了“+”运算符外,其它几个方法都属于原地操作(列表地址不变)。append()方法

append()方法在当前列表尾部追加元素,是原地修改列表,速度较快。extend()方法

extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。insert(index,x)方法insert(index,x)方法可以将元素添加至列表的指定位置,不建议从非尾部位置插入。

+运算符

通过+运算符来增加列表元素,会创建了一个新列表。涉及到大量元素的复制,操作速

度较慢4.列表元素的增加>>>aList=[1,2,3]>>>aList.append(4)>>>aList[1,2,3,4]>>>aList.extend({5,6})>>>aList[1,2,3,4,5,6]>>>aList.insert(3,0) #在索引号为3的位置插入元素0>>>aList[1,2,3,0,4,5,6]>>>aList=[1,2,3]>>>aList.append(4,5,6) 对吗?>>>aList.extend([4,5,6])对吗?>>>aList.append([4,5,6]) 结果是?5.列表元素的删除del命令使用del命令删除列表中的指定位置上的元素。clear()则会清除列表所有元素。pop()方法使用列表的pop()方法删除并返回指定位置(默认为最后一个)上的元素,如果给定的下标超出了列表的范围则抛出异常。remove()方法使用列表对象的remove()方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。5.列表元素的删除>>>aList=list((1,2,3,4,5))>>>aList.pop() #删除并返回最后一个元素5>>>aList.pop(2) #删除并返回索引号2上的元素3>>>aList [1,2,4]>>>aList=['a','b','c','a','a','d','e']>>>aList.remove('a') #删除首次出现的字符串a>>>aList ['b','c','a','a','d','e']5.列表元素的删除

运行下面的程序,可以发现当循环结束后却发现并没有把所有的“1”都删除,只是删除了一部分。为什么会发生这种现象?>>>x=[1,2,1,2,1,2,1,2,1]>>>foriinx: ifi==1: x.remove(i)>>>x[2,2,2,2]√但是当x=[1,2,1,2,1,1,1]结果为:[2,2,1]×为什么结果不对?5.列表元素的删除原因在于列表的自动内存管理功能。当删除列表元素时,Python会自动对列表内存进行收缩并移动列表元素,以保证所有元素之间没有空隙,增加列表元素时也会自动扩展内存并对元素进行移动以保证元素之间没有空隙。每当插入或删除一个元素之后,该元素位置后面所有元素的索引就都改变了。列表删除元素后长度变小,索引错位跳过了元素。5.列表元素的删除如何解决呢?第一种方法:改变删除方向>>>foriinrange(len(x)-1,-1,-1): #从后往前删,下标范围[6,0] ifx[i]==1: delx[i]第2种方法:使用切片

>>>foriinx[::]: #切片会自动创建一个新的列表 ifi==1: x.remove(i)第3种方法:使用while循环

#每次循环都重新检查列表的实时状态while1inx:x.remove(1)6.列表排序和反转

sort()方法用于按照指定的规则对列表中所有元素进行原地排序,该操作会改变原来列表元素的顺序,返回值为NoneType。reverse()方法用于将列表所有元素逆序或翻转。>>>a[15,8,14,16,10,19,13,18,11,17,12,9] >>>a.sort(key=str) #原地排序,指定排序依据根据字符串大小>>>a[10,11,12,13,14,15,16,17,18,19,8,9]>>>a.reverse() #反转列表,原地操作>>>a[9,8,19,18,17,16,15,14,13,12,11,10]sort()方法和sorted()函数都有一个参数reverse,默认为False,也就是升序,True时为降序。7.切片(1)切片定义切片针对序列类型,使用语法“序列名[start:end:step]”,返回序列的一个片段。第1个参数start表示切片的开始位置,当step为正整数时,start默认为0;第2个参数end表示切片的截止(不包含)位置,当step为正整数时,end默认为列表的长度;第3个参数step表示切片的步长,默认为1。当step为正整数时,表示正向切片。start为0时可以省略,当end为列表长度时可以省略,当step为1时可以省略,省略步长时,还可以同时省略最后一个冒号。当step为负整数时,表示反向切片。这时start位置应该在end位置的右侧,否则会返回空列表。start默认为-1,end默认为列表第1个元素前面的位置(-len(list_name)-1)。其中start和end表示序列元素的索引号。7.切片(2)切片执行流程比较start和end当step>0时,start<end;当step<0时,start>end;如果不满足条件,则返回空列表,如果满足,则取出索引号是start的元素,接着执行下一步index=start+step当index<end(step>0),或者index>end(step<0)时,取出索引号是index的元素,同时index+=step。如果不满足,则结束。继续第2步,直到不满足条件为止。7.切片(3)切片作用获取列表的部分元素

切片可以返回列表中元素组成的新列表。切片操作不会因为下标越界而抛出异常,代

码具有更强的健壮性。使用切片为列表增加/删除元素

可以使用切片操作在列表任意位置插入新元素,但是并不影响列表对象的内存地址,

属于原地操作。7.切片>>>numbers=[1,2,3,4,5,6,7,8]>>>a=numbers[::] #返回包含原列表中所有元素的新列表[1,2,3,4,5,6,7,8]>>>numbers[::2] #从第1个元素开始,隔1个取元素[1,3,5,7]>>>numbers[::-1] #反向切片[8,7,6,5,4,3,2,1]>>>numbers[1:3] #指定切片开始位置和结束位置,步长默认为1[2,3]>>>numbers[1::2] #指定切片开始位置和步长,省略结束位置[2,4,6,8]7.切片>>>num=[1,2,3,4,5]>>>num[len(num):]=[6,7,8]#列表尾部添加元素>>>num[1,2,3,4,5,6,7,8]>>>num[:0]=[-2,-1]#列表头添加元素num[:0]=[]>>>num[-2,-1,1,2,3,4,5,6,7,8]>>>aList=[3,5,7,9]>>>aList[:3]=[]#删除列表中前3个元素>>>aList[9]8.列表推导式列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。列表推导式语法形式为:[expressionforexpr1insequence1ifcondition1forexpr2insequence2ifcondition2forexpr3insequence3ifcondition3...forexprNinsequenceNifconditionN]列表推导式在逻辑上等价于一个循环语句,只是形式上更加简洁。8.列表推导式>>>num=[a*aforainrange(10)ifa!=5]>>>num[0,1,4,9,16,36,49,64,81]>>>a=[1,2,3]>>>b=[4,5,6]#注意嵌套关系,第2个循环作为第1个循环的循环语句>>>c=[x*yforxinaforyinb]>>>c[4,5,6,8,10,12,12,15,18]8.列表推导式>>>vec=[[1,2,3],[4,5,6],[7,8,9]] #将嵌套列表展平>>>[resultforeleminvecfornuminelem][1,2,3,4,5,6,7,8,9]等价于:>>>result=[]>>>foreleminvec: fornuminelem: result.append(num)9.列表测试、比较和统计(1)列表成员测试使用in/notin运算符可以判断一个元素是否在列表中。>>>aList=[1,2,3]>>>a=2>>>ainaListTrue>>>4notinaListTrue9.列表测试、比较和统计(2)列表比较关系运算符(<、>、==、!=、<=、>=)可以用来对列表进行比较。>>>list1=[1,2,3];list2=[2,5,6]>>>list1>list2False>>>list1<list2True(3)列表元素的统计列表对象的count()方法用来统计指定元素在列表中出现的次数。>>>aList=[3,4,5,5.5,7,9,11,13,15,7]>>>aList.count(7)2 10.多个列表迭代使用zip()函数可以完成对多个列表的迭代。>>>days=['Monday','Tuesday','Wednesday']>>>courses=['math','english','computer','science']>>>forday,courseinzip(days,courses): #当最短的列表迭代完时,zip()将停止 print(day,":study",course)Monday:studymathTuesday:studyenglishWednesday:studycomputer5.2元组列表的功能虽然很强大,但负担重、开销大,影响了程序运行效率。有时候我们并不需要那么多功能,很希望能有个轻量级的列表,元组(tuple)正是这样一种类型。从形式上,元组的所有元素放在一对圆括号中,元素之间使用逗号分隔,如果元组中只有一个元素则必须在最后增加一个逗号。元组定义后元组中元素的数量和引用不允许改变。1.元组概述元组(tuple)属于有序序列,支持使用双向索引访问其中的元素。元组属于不可变(immutable)序列,因此不可以直接修改元组中元素的值。元组没有提供append()、extend()和insert()等方法,无法向元组中添加元素;也不能从元组中删除元素,而只能使用del命令删除整个元组。元组支持切片操作,但是只能通过切片来访问元组中的元素,而不允许使用切片来修改元组中元素的值,也不支持使用切片操作来为元组增加或删除元素。如果定义一系列常量值,仅是对它们进行遍历或其它类似用途,而不需要对其元素进行修改,那么建议使用元组。1.元组概述>>>x=(1,2,3) #直接把元组字面值赋值给一个变量>>>type(x) #使用type()函数查看变量类型<class'tuple'>>>>x[0] #元组支持使用下标访问特定位置的元素1>>>x[-1] #最后一个元素,元组也支持双向索引3>>>x[1]=4 #元组是不可变的TypeError:'tuple'objectdoesnotsupportitemassignment2.元组创建和元素访问>>>x=(3) #这和x=3是一样的>>>x3>>>x=(3,) #如果元组中只有一个元素,必须在后面多写一个逗号>>>x(3,)>>>x=3, #真正创建元组的是逗号,圆括号只是辅助>>>x(3,)>>>x=() #空元组>>>x=tuple() #空元组>>>tuple(range(5)) #将其他迭代对象转换为元组(0,1,2,3,4)2.元组创建和元素访问很多内置函数的返回值也是包含了若干元组或者可以生成若干元组的可迭代对象,例如enumerate()、zip()等等。>>>list(enumerate(range(5)))[(0,0),(1,1),(2,2),(3,3),(4,4)]>>>list(zip(range(3),'abcdefg'))[(0,'a'),(1,'b'),(2,'c')]2.元组创建和元素访问当不再使用时,使用del命令删除整个元组。>>>t4=tuple(range(5)) #将可迭代对象转换为元组,结果为(0,1,2,3,4)>>>delt4 #只能删除整个元组>>>delt4[1] #错误,不能删除元组元素>>>t5=() #空元组color_tuple='Red','Green','Blue' #('Red','Green','Blue')3.元组删除当不再使用时,使用del命令删除整个元组。>>>t4=tuple(range(5)) #将可迭代对象转换为元组,结果为(0,1,2,3,4)>>>delt4 #只能删除整个元组>>>delt4[1] #错误,不能删除元组元素>>>t5=() #空元组color_tuple='Red','Green','Blue' #('Red','Green','Blue')3.元组删除列表和元组都属于有序序列,都支持使用双向索引访问其中的元素,以及使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引,len()、map()、filter()等大量内置函数和+、*、+=、in、notin等运算符也都可以作用于列表和元组。4.元组和列表的比较生成器表达式的用法与列表推导式非常相似,只是在形式上生成器表达式使用圆括号作为定界符,而不是列表推导式所使用的方括号。与列表推导式最大的不同是,生成器表达式的结果是一个生成器对象。生成器对象属于迭代器对象,具有惰性求值的特点,只在需要时生成新元素,空间占用非常少,尤其适合大数据处理的场合。5.生成器表达式使用生成器对象的元素时,可以根据需要将其转化为列表或元组,但一般不建议这样做。更推荐使用生成器对象的__next__()方法或者内置函数next()进行遍历,或者直接使用for循环来遍历其中的元素。只能从前往后正向访问每个元素,不可以再次访问已访问过的元素,也不支持使用下标访问其中的元素。当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象,enumerate、filter、map、zip等其他迭代器对象也具有同样的特点。5.生成器表达式使用生成器对象__next__()方法或内置函数next()进行遍历>>>g=((i+2)**2foriinrange(10)) #创建生成器对象>>>g<generatorobject<genexpr>at0x0000000003095200>>>>tuple(g) #将生成器对象转换为元组(4,9,16,25,36,49,64,81,100,121)>>>list(g) #生成器对象已遍历结束,没有元素了[]5.生成器表达式>>>g=((i+2)**2foriinrange(10)) #重新创建生成器对象>>>g.__next__() #使用生成器对象的__next__()方法获取元素4>>>g.__next__() #获取下一个元素9>>>next(g) #使用函数next()获取生成器对象中的元素165.生成器表达式使用for循环直接迭代生成器对象中的元素>>>g=((i+2)**2foriinrange(10))>>>foriteming: print(item,end='')491625364964811001215.生成器表达式5.3字典1.字典概述字典(dictionary)是包含若干“键:值”元素的无序可变容器对象,字典中的每个元素包含用冒号分隔开的“键”和“值”两部分,表示一种映射或对应关系,也称关联数组。定义字典时,每个元素的“键”和“值”之间用冒号分隔,不同元素之间用逗号分隔,所有的元素放在一对大括号{}中。字典中元素的“键”可以是Python中任意不可变数据,例如整数、实数、复数、字符串、元组等类型等可哈希数据,但不能使用列表、集合、字典或其他可变类型对象作为字典的“键”。字典中的“键”不允许重复,“值”可以重复。字典元素可以通过dict_name[key]来进行访问。2.字典的创建和删除使用“=”将一个字典赋值给一个变量即可创建一个字典变量>>>data={'国家':['富强','民主','文明','和谐'],'社会':['自由','平等','公正','法治‘],

'公民':['爱国','敬业','诚信','友善']}使用内置类dict以不同形式创建字典。>>>x=dict()#空字典>>>x={}#空字典>>>keys=['a','b','c','d']>>>values=[1,2,3,4]>>>d=dict(zip(keys,values))#根据已有数据创建字典>>>d=dict(name='Dong',age=39)#以关键参数的形式创建字典2.字典的创建和删除>>>dict.fromkeys(['name','age','sex']) #以给定内容为“键”,创建“值”为空的字典{'name':None,'age':None,'sex':None}>>>dict.fromkeys([3,5,7],666) #所有元素的“值”都是666{3:666,5:666,7:666}>>>d=dict.fromkeys([3,5,7],[]) #所有元素的“值”引用同一个空列表>>>d{3:[],5:[],7:[]}2.字典的创建和删除使用字典推导式来创建字典。>>>{num:chr(num)fornuminrange(97,103)}{97:'a',98:'b',99:'c',100:'d',101:'e',102:'f'}3.字典元素访问方法说明字典元素的访问dict[键]以“键”作为下标可以访问对应的“值”,若“键”不存在则抛出异常。get()dict.get(self,key,default=None,/)获取指定“键”对应的“值”,并且可以在“键”不存在的时候返回指定值。keys()dict.keys()返回字典的“键”。values()dict.values()返回字典的“值”。items()dict.items()返回字典的“键”、“值”对。3.字典元素访问字典的“键”作为下标就可以访问对应的“值”,如果字典中不存在这个“键”会抛出异常。>>>aDict={'age':39,'score':[98,97],'name':'Dong','sex':'male'}>>>aDict['age'] #指定的“键”存在,返回对应的“值”39>>>aDict['address'] #指定的“键”不存在,抛出异常KeyError:‘address‘

字典的get()方法返回指定“键”对应的“值”,可以指定键不存在时返回特定的“值”。>>>aDict.get('age') #如果字典中存在该“键”则返回对应的“值”39>>>aDict.get('address','NotExists.’) #指定的“键”不存在时返回指定的默认值'NotExists.'3.字典元素访问使用字典对象的items()方法可以返回字典的键、值对keys()方法可以返回字典的键values()方法可以返回字典的值>>>aDict={'age':39,'score':[98,97],'name':'Dong','sex':'male'}>>>aDict.items()dict_items([('age',39),('score',[98,97]),('name','Dong'),('sex','male')])>>>aDict.keys()dict_keys(['age','score','name','sex'])>>>aDict.values()dict_values([39,[98,97],'Dong','male'])4.字典元素添加、修改与删除(1)以指定“键”为下标为字典元素赋值时,有两种含义:若指定的“键”存在,表示修改该“键”对应的值;若指定的“键”不存在,表示添加一个新的“键:值”对,也就是添加一个新元素。>>>aDict={'age':35,'name':'Dong','sex':'male'}>>>aDict['age']=39#修改元素值>>>aDict{'age':39,'name':'Dong','sex':'male'}>>>aDict['address']='SDIBT'#添加新元素>>>aDict{'age':39,'name':'Dong','sex':'male','address':'SDIBT'}4.字典元素添加、修改与删除(2)使用update()方法可以将另一个字典的“键:值”元素一次性全部添加到当前字典对象中,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准。>>>aDict={'age':37,'score':[98,97],'name':'Dong','sex':'male’}#修改’age’键的值,同时添加新元素’a’:97>>>aDict.update({'a':97,'age':39})>>>aDict{'age':39,'score':[98,97],'name':'Dong','sex':'male','a':97}4.字典元素添加、修改与删除(3)删除字典中指定的元素,可以使用del命令。>>>delaDict['age']#删除字典元素>>>aDict{'score':[98,97],'name':'Dong','sex':'male','a':97}也可以使用字典对象的pop()和popitem()方法删除元素>>>aDict={'age':37,'score':[98,97],'name':'Dong','sex':'male'}>>>aDict.popitem()#以LIFO顺序删除并返回一个元素('sex','male')>>>aDict.pop('age')#删除指定的“键”,返回对应的“值”375.字典元素的排序字典是可以按照“键”或者“值”来进行排序。ddict={"a":10,"c":1,"b":100}#items()将字典的元素转换成了包含键值对元组的对象sorted(ddict.items(),key=lambdaitem:item[1]) #函数返回结果:[('c',1),('a',10),('b',100)]sorted(ddict.items(),key=lambdaitem:item[0]) #函数返回结果:[('a',10),('b',100),('c',1)]6.字典比较比较运算符“==”和“!=”分别用于确定两个字典是否具有相同或者不同的内容。当两个字典具有相同的键值对时,相等运算符“==”返回True,而不管这些键值对在字典中的顺序如何。>>>dict_a={"姓名":"何必是","性别":"男","年龄":46}>>>dict_b={"姓名":"伊定是","性别":"男","年龄":46}>>>dict_a==dict_bFalse5.4集合1.集合概述集合(set)属于Python无序可变容器对象,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不重复集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,不能以任何形式包含列表、字典、集合等可变类型的数据2.集合对象的创建与删除直接将集合字面值赋值给变量即可创建一个集合对象。>>>a={3,5} #创建集合对象使用函数set()函数将列表、元组、字符串、range对象或其他有限长度的可迭代对象转换为集合,并自动去除重复元素;如果原可迭代对象中有不可哈希的值,无法转换成为集合,抛出异常。>>>a_set=set(range(8,14)) #把range对象转换为集合>>>a_set{8,9,10,11,12,13}>>>b_set=set([0,1,2,3,0,1,2,3,7,8]) #转换时自动去掉重复元素>>>b_set{0,1,2,3,7,8}2.集合对象的创建与删除还可以使用集合推导式创建集合。>>>{x.strip()forxin('he','she','I')}{'he','she','I'}>>>fromrandomimportrandint>>>x={randint(1,500)for_inrange(50)}>>>len(x)47>>>{str(x)forxinrange(10)}{'6','5','8','1','4','0','9','2','3','7'}3.集合操作与运算(1)集合元素增加与删除集合的add()方法可以增加新元素,如果该元素已存在则忽略该操作,不会抛出异常update()方法用于合并另外一个或多个集合中的元素到当前集合中,并去除重复元素>>>s={1,2,3}>>>s.add(3) #添加元素,重复元素自动忽略>>>s{1,2,3}>>>s.update({3,4}) #更新当前字典,自动忽略重复的元素>>>s{1,2,3,4}3.集合操作与运算pop()方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;remove()方法用于删除集合中的元素,如果指定元素不存在则抛出异常;discard()用于从集合中删除一个特定元素,如果元素不在集合中则忽略该操作;clear()方法清空集合删除所有元素。>>>s.discard(5) #删除元素,不存在则忽略该操作>>>s{1,2,3,4}>>>s.remove(5) #删除元素,不存在就抛出异常KeyError:5>>>s.pop() #删除并返回一个元素13.集合操作与运算(2)集合运算>>>a_set=set([8,9,10,11,12,13])>>>b_set={0,1,2,3,7,8}>>>a_set|b_set #并集{0,1,2,3,7,8,9,10,11,12,13}>>>a_set&b_set #交集{8}>>>a_set-b_set #差集{9,10,11,12,13}>>>a_set^b_set

温馨提示

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

评论

0/150

提交评论