02-Python序列(PPT60页)1198.ppt

上传人:jix****n11 文档编号:77251531 上传时间:2023-03-13 格式:PPT 页数:60 大小:857.01KB
返回 下载 相关 举报
02-Python序列(PPT60页)1198.ppt_第1页
第1页 / 共60页
02-Python序列(PPT60页)1198.ppt_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《02-Python序列(PPT60页)1198.ppt》由会员分享,可在线阅读,更多相关《02-Python序列(PPT60页)1198.ppt(60页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第2章 Python序列主要内容列表元组字典2概述序列是Python中经常用到的数据存储方式,是按某顺序排列的数据。Python中常用的序列结构有列表、元组、字典、字符串等等。列表、元组、字符串等序列均支持双向索引第一个元素下标为0,第二个元素下标为1,以此类推;最后一个元素下标为-1,倒数第二个元素下标为-2,以此类推。32.1列表列表的创建和删除列表元素的增加列表元素的删除列表元素访问与计数成员资格判断切片操作列表排序用于序列操作的常用内置函数42.1列表列表是Python中内置可变序列,是元素的有序集合,列表中每一个数据称为元素,列表的所有元素放在一对中括号“”和“”中,并使用逗号分隔开

2、;列表中的各数据的类型可以不同,可以分别为整数、实数、字符串等基本类型,甚至是列表、元素、字典、集合以及其他自定义类型的对象例:10,20,30,40crunchyfrog,rambladder,larkvomitspam,2.0,5,10,20file1,200,7,file2,260,95方法说明list.append(x)将元素x添加至列表尾部list.extend(L)将列表L中所有元素添加至列表尾部list.insert(index,x)在列表指定位置index处添加元素xlist.remove(x)在列表中删除首次出现的制定元素list.pop(index)删除并返回列表对象指定位

3、置的元素list.clear()删除列表中所有元素,但保留列表对象,该方法在Python2中没有list.index(x)返回值为x的首个元素的下标list.count(x)返回指定元素x在列表中的出现次数list.reverse()对列表元素进行原地逆序list.sort()对列表元素进行原地排序list.copy()返回列表对象的浅拷贝,该方法在Python2中没有62.1列表2.1.1列表创建与删除用“=”创建列表,“=”赋值的同时创建alist=a,b,mpilgrim,z,examplealist=#创建空列表用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型

4、的数据转换为列表。例如:alist=list(3,5,7,9,11)#圆括号表示元组alist3,5,7,9,11list(range(1,10,2)#该range返回1,3,5,7,9list(helloworld)h,e,l,l,o,w,o,r,l,dx=list()#创建空列表x72.1.1列表创建与删除内置函数range(),语法为range(start,stop,step),第一个参数表示起始值(默认为0)第二个参数表示终止值,结果中不包括这个值第三个参数表示步长(默认为1),该函数在Python3.x中返回一个range可迭代对象,在Python2.x中返回一个包含若干整数的列表。

5、list(range(10)0,1,2,3,4,5,6,7,8,9list(range(3,10,2)3,5,7,9列表推导式*(本课程不要求)是一种生成符合特定要求列表的方式。82.1.1列表创建与删除del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。alist=a,b,mpilgrim,z,exampledelalistalistTraceback(mostrecentcalllast):File,line1,inalistNameError:namealistisnotdefined92.1.2列表元素的增加(1)“+”运算符来实现将元素添加到

6、列表中的功能。不是真的为列表添加元素,而是创建一个新列表将原列表中的元素和新元素依次复制到新列表的内存空间涉及大量元素的复制,该操作速度较慢,在涉及大量元素添加时不建议使用该方法。aList=3,4,5bList=aList+7aList3,4,5bList3,4,5,7102.1.2列表元素的增加(2)append()方法,修改原列表,在列表尾部添加元素,速度较快,例如:aList.append(9)#设aList为3,4,5,7aList3,4,5,7,9比较“+”和append()这两种方法的速度差异,分别生成0,1,2,9999:importtimeresult=start=time.

7、time()#time模块的time()函数返回当前时间foriinrange(10000):result=result+iprint(len(result),time.time()-start)result=start=time.time()foriinrange(10000):result.append(i)print(len(result),time.time()-start)打印结果:10000,0.2180120944976806610000,0.003000020980834961112.1.2列表元素的增加Python采用的是基于值的自动内存管理方式,当为对象修改值时,并不是真的

8、直接修改变量的值,而是使变量指向新的值。12例:a=5print(id(a)#函数id(a)获取a的内存地址a=6print(id(a)b=5print(id(b)打印结果:147126536014712653921471265360例:a=1,2,3print(id(a)a=1,2print(id(a)b=1,2,3print(id(b)打印结果:193339153607219333948028241933391536072红色地址不是每次执行都相同2.1.2列表元素的增加对于列表、集合、字典等可变序列类型而言,情况稍微复杂一些。以列表为例:1.列表中包含的是元素值的引用,而不是直接包含元素

9、值。2.通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加、删除和修改元素时,列表在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生变化。13a=1,2,4b=1,2,3a=bFalseid(a)=id(b)Falseid(a0)=id(b0)Truea=1,2,3id(a)25289752a.append(4)id(a)25289752a.remove(3)#删除a中的第一个3a1,2,4id(a)25289752a0=5a5,2,4id(a)252897522.1.2列表元素的增加(3)使用列表对象的extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾

10、部,并不改变其内存首地址。a.extend(7,8,9)#设a原为5,2,4a5,2,4,7,8,9id(a)25289752a.extend(11,13)a5,2,4,7,8,9,11,13a.extend(15,17)a5,2,4,7,8,9,11,13,15,17id(a)25289752142.1.2列表元素的增加(4)使用列表对象的insert()方法将元素添加至列表的指定位置。a.insert(3,6)a5,2,4,6,7,8,9,11,13,15,17insert()方法会涉及到插入位置之后所有元素的移动,这会影响处理速度,尽量从列表尾部进行元素的增加操作,如使用append()

11、152.1.2列表元素的增加比较append和insert:importtimedefInsert():#定义函数Insert()a=foriinrange(10000):a.insert(0,i)defAppend():a=foriinrange(10000):a.append(i)start=time.time()foriinrange(10):Insert()print(Insert:,time.time()-start)16start=time.time()foriinrange(10):Append()print(Append:,time.time()-start)运行结果如下:In

12、sert:0.578000068665Append:0.03099989891052.1.2列表元素的增加(5)使用乘法扩展列表对象,将列表与整数相乘,生成一个新列表,新列表是原列表中元素的重复。aList=3,5,7bList=aListid(aList)57091464id(bList)57091464aList=aList*3aList3,5,7,3,5,7,3,5,7bList3,5,7id(aList)57092680id(bList)5709146417注意:使用“*”运算符将包含列表的列表重复并创建新列表时,并不创建元素的复制,而是创建已有对象的引用。因此修改其中一个值时,相应的

13、引用也会被修改:x=None*2*3xNone,None,None,None,None,Nonex00=5x5,None,5,None,5,Nonex=1,2,3*3x00=10 x10,2,3,10,2,3,10,2,32.1.3列表元素的删除(1)使用del命令删除列表中的指定位置上的元素。del命令也可以直接删除整个列表。aList=3,5,7,9,11delaList1aList3,7,9,11delaListaListTraceback(mostrecentcalllast):File,line1,inaListNameError:nameaListisnotdefined182.1

14、.3列表元素的删除(2)使用列表的pop()方法删除并返回指定(默认为最后一个)位置上的元素,如果给定的索引超出了列表范围则抛出异常。a_list=3,5,7,9,11a_list.pop()#列表尾部操作,速度快11a_list3,5,7,9a_list.pop(1)#非列表尾部操作,速度慢5a_list3,7,9192.1.3列表元素的删除(3)使用列表对象的remove()方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。a_list=3,5,7,9,7,11a_list.remove(7)a_list3,5,9,7,11问:要删除列表中所有的7,如何写代码?202.

15、1.4列表元素访问与计数使用下标直接访问列表元素,指定下标不存在则抛出异常aList3#读取6aList3=5.5#赋值aList3,4,5,5.5,7,9,11,13,15,17aList15Traceback(mostrecentcalllast):File,line1,inaList15IndexError:listindexoutofrange212.1.4列表元素访问与计数使用列表对象的index方法获取指定元素首次出现的下标,不存在指定元素则抛出异常aList3,4,5,5.5,7,9,11,13,15,17aList.index(7)4aList.index(100)Traceb

16、ack(mostrecentcalllast):File,line1,inaList.index(100)ValueError:100isnotinlist222.1.4列表元素访问与计数列表对象的count方法统计指定元素在列表中出现的次数aList=3,4,5,5.5,7,9,11,13,5,17aList.count(7)1aList.count(0)0aList.count(5)2232.1.5成员资格判断如果需要判断列表中是否存在指定的值,可以使用“in”关键字来判断一个值是否存在于列表中,返回结果为“True”或“False”。24aList3,4,5,5.5,7,9,11,13,

17、15,173inaListTrue18inaListFalsebList=1,2,33inbListFalse3notinbListTrue3inbListTrueaList=3,5,7,9,11bList=a,b,c,d(3,a)inzip(aList,bList)True#zip(列表1,列表2,):将多个列表对应位置元素组合为元组,返回包含这些元组的列表fora,binzip(aList,bList):print(a,b)3a5b7c9d2.1.6切片操作1.切片是Python序列的重要操作之一,适用于列表、元组、字符串、range对象等类型。2.切片使用“数字-开始位置:数字-截止(但

18、不包含)位置:数字-切片的步长(默认为1)”来完成,当步长省略时可以顺便省略最后一个冒号。3.使用切片可以:截取列表中的任何部分,得到一个新列表。修改、增加、删除列表中部分元素4.切片操作返回一个新的列表。5.切片操作不会因为下标越界而抛出异常,而是在列表尾部截断或者返回一个空列表。252.1.6切片操作aList=3,4,5,6,7,9,11,13,15,17aList:3,4,5,6,7,9,11,13,15,17aList:-117,15,13,11,9,7,6,5,4,3aList:23,5,7,11,15aList1:24,6,9,13,1726aList3:6,7,9,11,13,

19、15,17aList3:66,7,9aList3:6:16,7,9aList0:100:1#超出范围3,4,5,6,7,9,11,13,15,17aList100:切片获取列表的部分:2.1.6切片操作切片原地修改列表内容27aList=3,5,7aListlen(aList):aListlen(aList):=9aList3,5,7,9aList:3=1,2,3aList1,2,3,9aList:3=aList9aList=list(range(10)aList0,1,2,3,4,5,6,7,8,9aList:2=0*(len(aList)/2)aList0,1,0,3,0,5,0,7,0,

20、92.1.6切片操作使用del与切片结合来删除列表元素aList=3,5,7,9,11delaList:3aList9,11282.1.6切片操作切片返回的是列表元素的浅复制29aList=3,5,7bList=aList#深复制,两列表数据在同一内存地址#改其中一个其他均一起改bList3,5,7bList1=8aList3,8,7aList=bListTrueaListisbListTrueid(aList)19061816id(bList)#地址相同19061816aList=3,5,7bList=aList:#浅复制,不同地址aList=bList#列表元素相同TrueaListisb

21、ListFalseid(aList)=id(bList)#地址不同FalsebList1=8bList3,8,7aList3,5,7aList=bListFalseaListisbListFalseid(aList)19061816id(bList)116561682.1.7列表排序使用列表对象的sort方法进行原地排序aList=3,4,5,6,7,9,11,13,15,17importrandomrandom.shuffle(aList)#将序列的所有元素随机排序aList3,4,15,11,9,17,13,6,7,5aList.sort()aList3,4,5,6,7,9,11,13,1

22、5,17aList.sort(reverse=True)aList17,15,13,11,9,7,6,5,4,3aList.sort(key=lambdax:len(str(x)#lambdax:len(str(x)是以x为传入参数的匿名函数aList9,7,6,5,4,3,17,15,13,11#按字符串长度排302.1.7列表排序使用内置函数sorted对列表进行排序并返回新列表aList9,7,6,5,4,3,17,15,13,11sorted(aList)3,4,5,6,7,9,11,13,15,17sorted(aList,reverse=True)17,15,13,11,9,7,6

23、,5,4,3使用列表对象的reverse方法将元素原地逆序aList=3,4,5,6,7,9,11,13,15,17aList.reverse()aList17,15,13,11,9,7,6,5,4,3312.1.7列表排序使用内置函数reversed方法对列表元素进行逆序排列并返回迭代对象aList=3,4,5,6,7,9,11,13,15,17newIteration=reversed(aList)newIterationlist(newIteration)17,15,13,11,9,7,6,5,4,3foriinnewIteration:print(i)#(无输出,迭代对象已遍历结束,需

24、重新创建迭代对象)newIteration=reversed(aList)foriinnewIteration:print(i)1715133322.1.8用于序列操作的常用内置函数在Python3.x中使用关系运算符来比较数值或序列的大小,也可以使用对象的“_le_()”及其相关方法。33a=1,2b=1,2,3(ab)-(aa._le_(b)Truea._gt_(b)Falsea=1,2b=1,2,3aabFalse(ab)=0True(aa=1,2,3b=4,5,6c=zip(a,b)cc=list(c)c(1,4),(2,5),(3,6)352.1.8用于序列操作的常用内置函数enum

25、erate(列表):枚举列表元素,返回枚举对象,其每个元素为包含下标和值的元组。该函数对元组、字符串同样有效。c=(1,4),(2,5),(3,6)foriteminenumerate(c):print(item)(0,(1,4)(1,(2,5)(2,(3,6)36上机作业021.编程:尝试输入一组数,找出其中被7除余5,被5除余3,被3除余2的所有数。2.P80第2.5题3.列表lst=2,3,7,1,6,8,10,请对列表按照升序、降序分别排序,分别使用列表方法sort()和内置函数sorted().372.2元组元组创建与删除元组与列表的区别序列解包382.2元组元组和列表类似,但属于不

26、可变序列,元组一旦创建,用任何方法都不可以修改其元素。元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“(”和“)”中,而不是方括号中。392.2.1元组创建与删除使用“=”将一个元组赋值给变量atuple=(a,)#元组只有一个元素时必须有一个“,”atuple(a)atuple=(a,b,mpilgrim,z,example)atuple(a,b,mpilgrim,z,example)a=3a3a=3,#“,”不能少a(3,)x=()#空元组x()402.2.1元组创建与删除使用tuple函数将其他序列转换为元组print(tuple(abcdefg)(a,b,c,d,e,f,g

27、)aList=-1,-4,6,7.5,-2.3,9,-11tuple(aList)(-1,-4,6,7.5,-2.3,9,-11)s=tuple()#空元组s()使用del删除元组,不能删除元组元素412.2.2元组与列表的区别元组中的数据一旦定义就不可更改。元组没有append()、extend()和insert()等方法,无法向元组中添加元素;元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素。元组的速度比列表更快元组对不需要改变的数据进行“写保护”将使得代码更加安全。一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)

28、。列表永远不能当做字典键使用,因为列表不是不可变的。内建的tuple()函数接受一个列表参数,并返回一个包含同样元素的元组,而list()函数接受一个元组参数并返回一个列表。422.2.3序列解包可以使用序列解包功能对多个变量同时赋值v_tuple=(False,3.5,exp)(x,y,z)=v_tuple#元组对元组赋值序列解包对于列表和字典同样有效a=1,2,3b,c,d=as=a:1,b:2,c:3#a:1中a为键,1为值,其余类推。b,c,d=s#缺省将键赋给对应元素,否则应写s.valuebaccdb432.2.3序列解包keys=a,b,c,dvalues=1,2,3,4fork

29、,vinzip(keys,values):print(k,v)执行:a1b2c3d444aList=1,2,3bList=4,5,6cList=7,8,9dList=list(zip(aList,bList,cList)forindex,valueinenumerate(dList):print(index,:,value)执行:0:(1,4,7)1:(2,5,8)2:(3,6,9)2.3字典字典创建与删除字典元素的读取字典元素的添加与修改字典应用案例有序字典452.3字典字典是键值对的无序可变集合。desk:书桌,book:书定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有元

30、素放在一对大括号“”和“”中。字典中的每个元素包含两部分:键和值,向字典添加一个键的同时,必须为该键增添一个值。字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等等。字典中的键不允许重复。globals()返回包含当前作用域内所有全局变量和值的字典locals()返回包含当前作用域内所有局部变量和值的字典462.3.1字典创建与删除使用“=”将字典赋值给变量a_dict=server:db.diveintopython3.org,database:mysqla_dictdatabase:mysql,server:db.diveintopython3.orgx=#空字典x472

31、.3.1字典创建与删除dict利用已有数据创建字典:keys=a,b,c,dvalues=1,2,3,4dictionary=dict(zip(keys,values)print(dictionary)a:1,c:3,b:2,d:4x=dict()#空字典x使用dict根据给定的键、值创建字典d=dict(name=Dong,age=37)dage:37,name:Dong482.3.1字典创建与删除以给定内容为键-值为空创建字典adict=dict.fromkeys(name,age,sex)adictage:None,name:None,sex:None使用del删除整个字典deladic

32、tadictTraceback(mostrecentcalllast):File,line1,inadictNameError:nameadictisnotdefined492.3.2字典元素的读取以键作为下标可以读取字典元素,若键不存在则抛出异常aDict=name:Dong,sex:male,age:37aDictnameDongaDicttelTraceback(mostrecentcalllast):File,line1,inaDicttelKeyError:tel502.3.2字典元素的读取使用字典对象的get方法获取指定键对应的值,并且可以在键不存在的时候返回指定值。print(a

33、Dict.get(address)Noneprint(aDict.get(address,SDIBT)SDIBTaDictscore=aDict.get(score,)#由于没有score键,将增加此键,对应值成为空列表aDictscore.append(98)aDictscore.append(97)aDictage:37,score:98,97,name:Dong,sex:male512.3.2字典元素的读取字典对象的items()方法返回字典的键、值元组对列表字典对象的keys()方法返回字典的键列表字典对象的values()方法返回字典的值列表52aDict=name:Dong,sex

34、:male,age:37foriteminaDict.items():print(item)(age,37)(name,Dong)(sex,male)forkey,valueinaDict.items():print(key,value)age37nameDongsexmaleforkeyinaDict:print(key)agenamesexaDict.keys()dict_keys(age,name,sex)aDict.values()dict_values(37,Dong,male)2.3.3字典元素的增改删当以指定键为下标为字典赋值时,若键存在,则可以修改该键的值;若不存在,则表示添加

35、一个键、值对。aDictage=38aDictage:38,name:Dong,sex:maleaDictaddress=SDIBTaDictage:38,address:SDIBT,name:Dong,sex:male532.3.3字典元素的增改删使用字典对象的update方法将另一字典的键、值对添加到当前字典对象,如果原字典有相同键则修改相应值aDict=age:37,score:98,97,name:Dong,sex:maleaDict.items()(age,37),(score,98,97),(name,Dong),(sex,male)aDict.update(age:38,a:a,

36、b:b)aDicta:a,score:98,97,name:Dong,age:38,b:b,sex:male542.3.3字典元素的增改删使用del删除字典中指定键的元素aDict=age:37,score:98,97,name:Dong,sex:maledelaDictageaDictsex:male,name:Dong,score:98,97使用字典对象的clear()方法来删除字典中所有元素aDict.clear()aDict使用字典对象的pop()方法删除并返回指定键的元素aDict=age:37,score:98,97,name:Dong,sex:maleaDict.pop(age)

37、37aDictsex:male,name:Dong,score:98,97使用字典对象的popitem方法-随机-删除并返回字典中的一个元素aDict.popitem()(sex,male)aDictname:Dong,score:98,97552.3.4*字典应用案例下面的代码首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。*importstringimportrandomx=string.ascii_letters+string.digits+string.punctuationxabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS

38、TUVWXYZ0123456789!#$%&()*+,-./:;?_|y=random.choice(x)foriinrange(1000)#random.choice()方法返回列表,元组或字符串中的随机项z=.join(y)d=dict()forchinz:dch=d.get(ch,0)+1562.3.4*字典应用案例也可以使用collections模块的defaultdict类来实现该功能。*importstringimportrandomx=string.ascii_letters+string.digits+string.punctuationy=random.choice(x)fo

39、riinrange(1000)z=.join(y)fromcollectionsimportdefaultdictfrequences=defaultdict(int)frequencesdefaultdict(,)foriteminz:frequencesitem+=1frequences.items()572.3.4*字典应用案例使用collections模块的Counter类可以快速实现这个功能,并且能够其他需要,例如查找出现次数最多的元素。下面的代码演示了Counter类的用法:*fromcollectionsimportCounterfrequences=Counter(z)freq

40、uences.items()frequences.most_common(1)(A,22)frequences.most_common(3)(A,22),(;,18),(,17)582.3.5*有序字典Python内置字典是无序的。如果需要可以记住元素插入顺序的字典,可以使用collections.OrderedDict。例如下面的代码:x=dict()#无序字典xa=3xb=5xc=8xb:5,c:8,a:3importcollectionsx=collections.OrderedDict()#有序字典xa=3xb=5xc=8xOrderedDict(a,3),(b,5),(c,8)59作业1、字典d=,“张三”:76,“李四”:45,“王五”:83,“赵六”:66,写出下列操作的代码:a)向字典中添加键值对“钱七”:90b)修改“李四”的值为60c)删除“赵六”对应的键值对2、P80习题2.5统计整数的个数3、P80习题2.960

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com