数据结构基本上就是——是可以处理一些数据的结构。换句话说,它们用于存储一组相关数据。Python中有四种内置数据结构——列表、元组和字典、集合。我们将学习如何使用它们以及它们如何使编程变得容易。列表是一种处理有序项目集的数据结构,即您可以在列表中存储一系列项目。想象一下,你有一张购物清单,上面列着你想买的东西,你会很容易理解这份清单。只是在您的购物清单上,每个项目可能都有自己的行,而在Python中,您用逗号分隔每个项目。列表中的项目应括在方括号中,以便Python知道您正在指定一个列表。创建列表后,您可以在列表中添加、删除或搜索项目。既然可以增删项目,我们就说列表是可变数据类型,也就是这种类型是可以改变的#Shoppinglistshoplist=['apple','mango','carrot','banana']basic操作print('Ihave',len(shoplist),'我的购物清单里有东西。')print('Theyare:'),#Tipforiteminshoplist:print(item)print('Ialso我买了米饭。')shoplist.append('rice')print('Nowmyshoppinglistis',shoplist)#['apple','mango','carrot','banana','rice']Basic操作——addappendli=['apple','mango','carrot','banana']li.append('rice')print(li)#['apple','mango','carrot'','香蕉','大米']li.append(1)#['苹果','芒果','胡萝卜','香蕉','大米',1]print(li.append('你好'))#None:没有返回值,li.append()只是一个方法,actionprint(li)#['apple','mango','carrot','banana','rice',1,'hello']insertinsertli=['apple','mango','carrot','banana']li.insert(3,'strawberry')print(li)#['apple','mango','胡萝卜','草莓','香蕉']扩展是附加到最后li=['Apple','Mango','Carrot','Banana']li.extend('cc')print(li)#['Apple','Mango','Carrot','香蕉','c','c']li.extend([1,2,3])print(li)#['苹果','芒果','胡萝卜','香蕉','c','c',123]li.extend(123)#Error:Numberscannotbeiteratedprint(li)#TypeError:'int'objectisnotiterable应用示例:连续输入员工姓名,输入Q/q退出,打印列表li=[]whileTrue:username=input("请输入要添加的员工姓名:")ifusername.strip().upper()=='Q':breakli.append(username)print(li)print(li)结果:]List-deleteremove:按元素删除li=['apple','mango','carrot','banana']li.remove('mango')print(li)#['apple','carrot','Banana']pop:根据索引删除-返回值li=['apple','mango','carrot','banana']name=li.pop(1)#returnvalueprint(name,li)#Mango['apple','carrot','banana']name=li.pop()#如果不写索引,默认删除最后一个print(name,li)#Banana['apple','carrot']clear:clearli=['apple','mango','carrot','banana']li.clear()print(li)#[]del:deleteli=['apple','mango','carrot'','Banana']delli[2:]print(li)#['Apple','Mango']delli#删除后不存在,打印错误print(li)#NameError:name'li'isnotdefinedloopdeleteli=[11,22,33,44,55]foriinrange(len(li)):print(i)delli[0]打印(li)list-改变li[index]='Modli=['Apple','Mango','Carrot','Banana']li[0]='DragonFruit'#Changeindex0to'DragonFruit'print(li)#['DragonFruit','Mango','Carrot','Banana']li[slice]='修改后的内容'(迭代:分成最小的元素,逐个添加)li=['apple','Mango','Carrot','Banana']li[0:2]='abcd'#将索引0-2替换为abcd,切片后迭代print(li)//['a','b','c','d','胡萝卜','香蕉']li[0:3]=['我','喜欢','吃','水果']print(li)//['我','喜欢','吃','水果','d','carrot','banana'list-从头到尾检查:forloopli=['apple','mango','carrot','banana']foriinli:print(i)acertainone:indexli=['apple','mango','carrot','banana']print(li[1])#芒果部分:sliceli=['apple','mango','carrot','banana']print(li[0:2])#['apple','mango','carrot']列表-嵌套li=['apple','mango','carrot',['a','b','c'],'banana']print(li[2][1])#草li[3][0].upper()#将列表中第四个元素列表的第一个元素改为大写print(li)#['apple','mango','carrot',['a','b','c'],'banana']列表-循环打印#index默认从零开始li=['alex','taibai','wusir','egon']foriinli:print(li.index(i),i)指定从100个结果开始运行的索引:其他常用操作split:字符串转换成列表str--->lists='xcsd_cdc_eht_wood'print(s.split('_'))//['xcsd','cdc','eht','wood']s1='xcsdcdcehtZengMumu'print(s1.split(''))//['xc','sdc','dc','ehtZeng','Mumu']join:将列表转换为字符串列表--->strjoin(iterableobjectiterable)splititerableobjectiterable:list,str,ancestorli=['xcsd','cdc','eht','wood']s=''.join(li)打印(s)#xcsdcdceht木木s1='_'.join(li)print(s1)#xcsd_cdc_eht_木木范围:不分首尾——相当于一个有序的数字列表(可以倒过来,加大步长)foriinrange(2,6):print(i)应用示例:循环打印,在列表中遇到一个列表,也需要循环打印li=[1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds']foriinli:iftype(i)==list:fornini:print(n)else:print(i)运行结果:2.元组的元组和列表非常相似,除了元组像字符串一样是不可变的,即你不能修改元组。元组由括号中的逗号分隔项定义。当语句或用户定义的函数可以安全地取一组值时,通常会使用元组,也就是说,正在使用的元组的值不会改变tu1=(1)tu2=(1,)print(tu1,type(tu1))#1print(tu2,type(tu2))#(1,)tu3=([1])tu4=([1],)print(tu3,type(tu3))#[1]print(tu4,type(tu4))#([1],)元组基本操作tu=(1,2,3,'alex','egon')print(tu[2])#3print(tu[0:2])#(1,2)foriintu:print(i)#循环打印元祖字典dictionary类似你安按联系人姓名查找地址和联系人详细信息的地址簿,即我们将键(名称)与值(详细信息)相关联。注意key必须是唯一的,如果两个人碰巧同名,你就无法找到正确的信息。请注意,您只能使用不可变对象(例如字符串)作为字典键,但您可以使用不可变或可变对象作为字典值。基本上,您应该只使用简单的对象作为键。键值对在字典中以这种方式标记:d={key1:value1,key2:value2}。注意它们的key/value对用冒号隔开,单独的pair用逗号隔开,全部用花括号括起来dictkey(key)必须是不可变数据类型,hashablevalue(value)任意数据类型dict二分查找查询 存储大量关系型数据特点:<=3.5版本是无序的,3.6以后的版本是有序的1.字典--添加dic['key']=valuedic1={'age':18,'name':'xc','sex':'female'}dic1['height']=165print(dic1)#没有键值对,增加#{'age':18,'name':'xc','sex':'female','height':165}dic1['age']=21print(dic1)#如果有键值对,修改#{'age':21,'name':'xc','sex':'female','height':165}setdefaultsetdefault#dic1={'age':18,'name':'xc','sex':'female'}dic1.setdefault('weight',120)print(dic1)#没有键值对,添加#{'age':18,'name':'xc','sex':'female','weight':120}dic1.setdefault('name','aa')print(dic1)#有键值对,什么都不做#{'age':18,'name':'xc','性别':'女','体重':120}2.Dictionary——delete删除优先使用pop(有返回值,当要删除的内容不存在时不会报错),而不是delpopdeletedic1={'age':18,'name':'xc','sex':'female'}print(dic1.pop('age'))#有age直接删除---有返回值,按删除print(dic1)#18{'name':'xc','sex':'female'}print(dic1.pop('erge','nosuchkey/None'))#noerge----可以设置返回值:nosuchkey/Noneprint(dic1)popitem随机删除dic1={'age':18,'name':'xc','sex':'female'}print(dic1.popitem())#('sex','female')#随机删除:returnValue-----返回元组:删除键值clearcleardic1={'age':18,'name':'xc','sex':'female'}dic1.clear()#cleardictionaryprint(dic1)#{}deldeletedic1={'age':18,'name':'xc','sex':'female'}deldic1['name']#如果有则删除#deldic1['name1']#不行,那就报错print(dic1)#{'age':18,'sex':'female'}3.字典-更改updatedic={'age':18,'name':'xc','sex':'female'}dic2={'name':'alex','weight':'168'}dic2.update(dic)#如果有,更新覆盖率,如果没有,增加print(dic)#{'age':18,'name':'xc','sex':'female'}print(dic2)#{'姓名':'xc','体重':'168','年龄':18,'性别':'女'}4.字典-查找键、值、项目dic1={'age':18,'name':'xc','sex':'female'}print(dic1.keys(),type(dic1.keys()))#keydict_keys(['age','name','sex'])print(dic1.values())#valuedict_values([18,'xc','female'])print(dic1.items())#元祖dict_items([('age',18),('name','xc'),('sex','female')])获取键值,preferredgetprint(dic1['南e'])#如果有就打印#print(dic1['name1'])#如果没有报错print(dic1.get('name1','nosuchkey'))#noname1----可以设置返回值:nosuchkey/None循环输出foriindic1:print(i)#cycleprintkey(defaultiskey)foriindic1.keys():print(i)#loopprintingkeyforiindic1.values():print(i)#loopprintingvalue5.Nesteddicofdictionary={'name':['alex','wusir','xinchen'],'py9':{'time':'1213','study_fee':19800,'addr':'CBD',},'age':21}dic['age']=56#找到年龄,更新为56print(dic)dic['name'].append('rt')#查找name,添加nameprint(dic)dic['name'][1]=dic['name'][1]。upper()#查找name,然后将wusir改为大写print(dic)dic['py9']['female']=6#查找元祖,添加键值对female:6print(dic)应用示例:#Input一串字符,遇到一个字母,转成'_',打印出info=input('Pleaseenter:')foriininfo:ifi.isalpha():info=info.replace(i,'_')打印(信息) 运行结果:4.SetSets类似于列表,但每个元素必须是唯一且不可变的:它是一个无序的基本操作print(set1)#{1,2,3}set2={1,2,3,[2,3],{'name':'xc'}}#列表是可变的(不可散列),所以出错print(set2)#TypeError:unhashabletype:'list'1.Set—addaddset1={'alex','wusir','ritian','egon','barry'}#(1)add#因为集合是无序的,所以每次操作的结果不一定相同,add位置不一定相同set1.add('nvshen')#{'ritian','nvshen','egon','wusir','alex','barry'}print(set1)updateset1.update('xc')#迭代加法,依然无序print(set1)#{'egon','x','wusir','nvshen','c','alex','ritian','barry'}2.Set——deleteset1={'alex','wusir','ritian','egon','barry'}pop——随机删除print(set1.pop())#egon:返回值,返回这个删除的内容为第二次print(set1)#{'barry','alex','wusir','ritian'}remove——删除指定元素set1.remove('alex')print(set1)#{'egon','wusir','barry','ritian'}clear——clearset1.clear()print(set1)#清空集合:set()deldelset1#删除后集合不存在,报错报告print(set1)#NameError:未定义名称“set1”3。集合不能改变。该集合是无序的;集合中的元素是不可变数据类型4。Set-checkset1={'alex','wusir','ritian','egon','barry'}foriinset1:print(i) 运算结果:5.集合间运算set1={1,2,3,4,5}set2={4,5,6,7,8}交集print(set1&set2)#(1){4,5}print(set1.intersection(set2))#(2){4,5}联合打印(set1|set2)#(1){1,2,3,4,5,6,7,8}print(set1.union(set2))#(2){1,2,3,4,5,6,7,8}反交集——除交集以外的其他元素print(set1^set2)#(1){1,2,3,6,7,8}print(set1.symmetric_difference(set2))#(2){1,2,3,6,7,8}差集--前唯一print(set1-set2)#(1){1,2,3}print(set1.difference(set2))#(2){1,2,3}print(set2-set1)#(1){8,6,7}print(set2.difference(set1))#(2){8,6,7}子集和超集set3={1,2,3,4,5}set4={1,2,3,4,5,6,7,8}print('------set3是set4的子集------')print(set3set3)#Trueprint(set4.issuperset(set3))#True5.公共方法排序正向排序:sort()li=[1,5,4,2,6,7,3]li.sort()print(li)#[1,2,3,4,5,6,7]倒序排列:li.sort(reverse=True)li=[1,5,4,2,6,7,3]li.sort(reverse=True)print(li)#[7,6,5,4,3,2,1]反转:li.reverse()li=[1,5,4,2,6,7,3]li.reverse()打印(李)#[3,7,6,2,4,5,1]补充:字符串列表排序——根据第一个字符串字符对应的ASCII码排序li=['ojhy','asa','cvd','hdk']li.sort()print(li)#['asa','cvd','hdk','ojhy']count()统计元素出现的次数li=['xcsd','cdc','Mumu',[1,5,2],'eht','Mumu']num=li.count('木木')print(num)#2:'木木'出现两次len()计算列表的长度li=['xcsd','cdc','木木',[1,5,2],'eht','木木']l=len(li)print(l)#6:列表长度为6li.index('element')查看索引li=['xcsd','cdc','Xinchen',[1,5,2],'eht','Xinchen']print(li.index('eht'))#4:'eht'的索引是4个元组6个。异同异同listlisttupletuplecollectionsetdictionarydict可读写读写读写读写读写可重复yes是存储方式valuevaluekey
(不可重复)键值对
(key不能重复)是否有序有序,有序,无序,自动正序初始化[1,'a']('a',1)set([1,2])
或{1,2}{'a':1,'b':2}addappendread-onlyaddd['key']='value'readelementl[2:]t[0]nod['a']练习地址:www.520mg.com/it