Python语言数据结构.pptx
Python语言数据结构,掌握元组和列表等序列结构的操作方法掌握字符串的常见操作方法掌握字典数据结构的操作方法掌握集合数据结构的操作方法,2,引言,为了在计算机程序中表示现实世界中更加复杂的数据,Python除了提供数字和字符串等数据类型,还提供了元组、列表、字典和集合等复杂类型的数据结构。,3,序列,序列是Python中最基本的数据结构,其中最常见的就是元组、列表和字符串。元组是一种序列,就像列表一样。元组和列表之间的主要区别是元组不能像列表那样改变元素的值,可以简单地理解为“只读列表”。元组使用小括号()将数据包含起来,而列表使用方括号。,4,元组,元组的主要作用是作为参数传递给函数调用、或是从函数调用那里获得参数时,保护其内容不被外部接口修改。,5,创建元组,空元组由没有包含任何内容的一对小括号表示:()()特别要注意的是:要编写包含单个值的元组,值后面必须加一个逗号:(12,)(12,),6,包含多个元素的元组,如果我们希望创建一个包含多个值的元组,我们可以这样做:(1,2,3,4,5,6)(1,2,3,4,5,6)同时,元组中的数据项不需要具有相同的数据类型:(name,number,2008,2017)(name,number,2008,2017),7,访问元组中的数据,我们可以使用变量来存放元组数据,还可以使用索引或分片来访问元组中的值,例如:tup=(1,2,3,4,5)tup0#索引访问,从零开始1 tup45 tup-1#反向读取,读取倒数第一个元素5 tup1:4#使用分片可以访问元组的一段元素(2,3,4)tup1:(2,3,4,5),8,元组的连接,元组中的元素值是不允许修改的,但可以使用多个现有元组来创建新的元组:tup1=(1,2,3,4,5)tup2=(a,b,c,d,e)tup3=tup1+tup2 tup3(1,2,3,4,5,a,b,c,d,e)通过创建新的元组,我们就可以得到我们想要的元组数据了。,9,删除元组,元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组:tup=(1,2,3,4,5)del tup tupTraceback(most recent call last):File,line 1,in tupNameError:name tup is not defined,10,常用元组函数,11,列表,列表是Python中最常用的数据结构,一个列表中也可以存放多个数据,列表与元组的主要区别是列表可以改变元素的值。,12,创建列表,创建一个列表,使用方括号 将用逗号分隔的元素括起来即可:list1=1,2,3,4,5 list11,2,3,4,5列表中的元素也可以是不同的数据类型:list2=1,2,3,a,b,c list21,2,3,a,b,c,13,访问列表中的数据,和元组一样,我们也可以使用索引或分片访问列表中的元素:list23a list23:6a,b,c,14,列表元素复制,我们可以将列表数据通过赋值存放到单个变量中,然后通过索引值对列表特定位置元素进行赋值:list2=1,2,3,a,b,c list21,2,3,a,b,c list22=4#将列表中数字3用数字4替换 list21,2,4,a,b,c list25=d#将字符c用字符d替换 list21,2,4,a,b,d,15,还可以通过分片将列表中的一部分元素赋值给新的变量:char=a,b,e,f char2:=c,d chara,b,c,d,16,除了普通的赋值,列表分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素:number=1,5,6 number1:1=2,3,4 number1,2,3,4,5,6以此类推,通过分片赋值还可以实现删除列表中元素的操作:number=1,2,3,4,5,6 number1:4=#结果和del number1:4相同 number1,5,6,17,删除列表中的元素,有时,我们需要删除列表中的数据,我们可以使用del命令来完成,例如:list2=1,2,3,a,b,c del list25 list21,2,3,a,b,18,列表的append方法,如果你想往现有的列表中追加新的元素,可以通过使用列表的append方法,例如:name=Zhao,Qian,Sun,Li name.append(Zhou)nameZhao,Qian,Sun,Li,Wang name.append(Wu,Zheng)#使用append方法,每次只能在列表末尾追加一个元素Traceback(most recent call last):File,line 1,in name.append(Zhou,Wu)TypeError:append()takes exactly one argument(2 given),19,列表的extend 方法,通过列表的extend方法可以将新列表扩展到原有列表中,例如:name=Zhao,Qian,Sun,Li name1=Zhou,Wu,Zheng,Wang name.extend(name1)nameZhao,Qian,Sun,Li,Zhou,Wu,Zheng,Wang,20,列表的insert方法,通过列表的insert方法,可以将新元素插入到列表指定位置:number=1,2,3,5,6,7,8 number.insert(3,4)#第一个值3是索引,第二个值4为要插入的值 number1,2,3,4,5,6,7,8,21,列表的index方法,列表中的index方法可以找出某个值的第一个匹配项的索引值,如果列表中不包含你要找的数据,Python会给出相应的报错信息,例如:name=Zhao,Qian,Sun,Li,Zhao name.index(Zhao)0 name.index(Wang)Traceback(most recent call last):File,line 1,in name.index(Wang)ValueError:Wang is not in list,22,列表的count方法,列表中的count方法可以用来统计某个元素在列表中出现次数:list3=a,b,c,d,e,f,e list3.count(e)2,23,列表的pop方法,列表中pop方法可以移除列表中的某个元素(默认是最后一个元素),并返回该元素的值:number=1,2,3 number.pop()3 number1,2 number.pop(0)1 number2,24,列表的remove方法,列表中的remove方法可以用来移除列表中的某个元素的第一个匹配项,与index方法一样,如果没有找到相应的元素,Python则会产生报错,例如:char=a,b,c,a char.remove(a)charb,c,a char.remove(d)Traceback(most recent call last):File,line 1,in char.remove(d)ValueError:list.remove(x):x not in list,25,列表的reverse方法,列表reverse方法将列表中的元素反向放置,这个操作也被称为逆置:number=1,2,3,4,5,6 number.reverse()number6,5,4,3,2,1,26,列表的sort方法,列表的sort方法可以对列表进行排序,默认的排序方式为从小到大:number=3,2,1,5,4,6 number.sort()number1,2,3,4,5,6,27,常用列表函数,28,字符串,字符串或串(String)是由数字、字母、下划线组成的一串字符,用一对引号包含。它是编程语言中表示文本的数据类型。通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。,29,字符串赋值,字符串是 Python 中最常用的数据类型。我们可以使用单引号()或者双引号()来表示字符串。创建字符串很简单,只要为变量赋值即可。如:var1=Hello World!var2=python,30,截取字符串,Python中字符串,可以使用方括号 来截取访问字符串,如下:var1=Hello World!var10H var11:5ello var15:World!,31,连接字符串,连接多个字符串成为一个新的字符串,这将会在原字符串的基础上连接其他字符串形成一个新字符串,例如:var1=Hello World!var2=python var1=var1+var2 var1Hello World!python,32,格式化字符串,Python 支持格式化字符串的输出,基本的用法是将一个字符串插入到另外一个有字符串格式符%的字符串中。例如:print My name is%s%(Tom)My name is Tom在%左侧放置需要格式化的字符串,右侧放置希望格式化的值。这个值可以是字符串或数字,或者元组、字典。格式化字符串的%s部分称为格式说明符,它们标记了需要插入转换值的位置。上例中的s表示值会被转换为字符串。,33,格式符号的含义,34,字符串的find方法,使用字符串的find()方法在字符串中查找子字符串,并返回子字符串所在位置的最左端索引,注意find方法并不返回布尔值,如果返回的是0,证明在索引0位置找到了子串,若没有找到该子字符串则返回-1:string=I Love Python string.find(Love)2 string.find(name)-1,35,字符串的join方法,使用字符串的join方法,用来在队列中添加元素,需要注意的是需要添加的队列元素都必须都是字符串类型的数据,例如:seq=1,2,3,4,5 seq1=*seq1.join(seq)1*2*3*4*5,36,字符串的split方法,split方法是join方法的逆方法,该方法可以将字符串分割成字符串,在不提供任何分隔符的情况下,该方法默认将空格作为分隔符:string=1*2*3*4*5 string.split(*)1,2,3,4,5,37,字符串的strip方法,strip方法可以去除字符串两端的空格:string=I Love Python string.strip()I Love Python,38,字符串的lower和upper方法,使用字符串的lower()和upper()方法,将字符串中的大小写进行转换:var1=Hello World!var2=python var1=var1.lower()#将字符串均转换为小写字母 var1hello world!var2=var2.upper()#将字符串均转换为大写字母 var2PYTHON,39,in运算符,为了判断某个字符是否包含在字符串中,我们可以使用in运算符,该运算会得到一个逻辑型的结果,表示运算符左边的字符串是否存在于右边的字符串中:var1=Hello World!H in var1True,40,字典,字典是一种通过名字来引用值的数据结构。这种类型的数据结构称为映射(Mapping)。字典是Python中唯一内建的映射类型。字典中的值(value)没有特殊的顺序,但是都存储在特定的键(key)下。,41,字典的创建,字典由多个(键:值)对组成,键和值之间通过冒号分割,所有的键值对用大括号括起来,键值对之间使用逗号分割。d=a:1,b:2,C:3,d:4,e:5我们也可以通过dict()函数创建一个空字典:dict(),42,访问字典中的数据,和访问序列元素的方式相似,通过在中括号中填入键名对字典中该键所对应的值进行访问,例如:da1若索访问的键值对不存在就会输出错误:dfTraceback(most recent call last):File,line 1,in dfKeyError:f,43,更新字典中的数据,向字典中添加新内容的方法是增加新的(键:值)对:d=a:1,b:2,c:3,d:4,e:4 df=5 da:1,b:2,c:3,d:4,e:4,f:5使用del命令删除字典中的指定键值对:del df da:1,b:2,c:3,d:4,e:4,44,清空字典,与del命令不同,使用clear()方法可以清空字典中的所有项,使字典变为空字典:d=a:1,b:2,c:3,d:4,e:4 d.clear()d,45,字典的copy方法,字典的copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身是相同的,而不是副本):x=a:1,b:2,3,4 y=x.copy()ya=5 yb.remove(3)y a:5,b:2,4 x a:1,b:2,4,46,字典的deepcopy方法,可以看出copy对于一个复杂对象的子对象并不会完全复制,这种方式我们称为浅拷贝。避免这个问题的方法是使用深拷贝deepcopy(),复制其包含所有的值:x=a:1,b:2,3,4 y=x.copy()z=x.deepcopy()xa.append(5)y a:1,5,b:2,3.4#使用浅拷贝,不会随着原数据变化 z a:1,b:2,3,4#使用深拷贝,两个变量中存放的是同一内存中的数据,47,字典的fromkeys方法,字典的fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None,可以直接在所有字典的类型dict上调用此方法。如果不想使用默认值,也可以自己提供值:.fromkeys(name,age)age:None,name:None dict.fromkeys(name,age,unknow)age:unknow,name:unknow,48,字典的get方法,字典的get方法是个更宽松的访问字典项的方法。当使用get访问一个不存在的键时,会得到None值。还可以自定义“默认”值,替换None:d=print d.get(name)None d.get(name,N/A)N/A dname=Eric d.get(name)Eric,49,字典的has_key方法,字典的has_key方法可以检查字典中是否含有给出的键:d=d.has_key(name)False,50,字典的items方法,字典的items方法将所有的字典项以列表方式返回,但是列表中的每一项(键,值)返回时并没有特殊的顺序。iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:d=a:1,b:2,c:3d.items(a,1),(b,2),(c,3)it=d.iteritems()it list(it)(a,1),(b,2),(c,3),51,字典的pop方法,字典的pop方法用来获得对应给定键的值,然后将这个键-值对从字典中移除:d=a:1,b:2,c:3 d.pop(a)db:2,c:3,52,字典的setdefault方法,字典的setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值:d=d.setdefault(name,N/A)N/A dname:N/A d.setdefault(name,New Value)N/A,53,字典的update方法,字典update方法可以利用一个字典项更新另一个字典。提供的字典项会被添加到旧的字典中,若有相同的键则会进行覆盖:d=a:1,b:2,c:3 x=a:5,d:6 d.update(x)da:5,c:3,b:2,d:6,54,字典的values方法,字典values方法以列表的形式返回字典中的值(itervalues返回值的迭代器),与返回键的列表不同的是,返回值列表中可以包含重复的元素:d=1:1,2:2,3:3,4:1 d.values()1,2,3,1,55,常用字典函数,56,字典嵌套,有的时候,我们还需要把字典中的元素设置为另一个字典数据,从而创建一个嵌套字典,例如:peopleInfor=Tom:phonenumber:2354,addr:street4,Suan:phonenumber:9123,addr:street7,Nick:phonenumber:5789,addr:street10peopleInforTomaddr:street4,phonenumber:2354peopleInforTomphonenumber 2354,57,集合,Python的集合(set)和数学中的定义保持一致,是一个无序不重复元素集。,58,创建集合,Python中使用set()函数创建集合:set(123456)1,4,3,6,2,5集合的一个重要特点就是内部元素不允许重复:set(aabbccddee)b,d,a,e,c,59,集合数据的添加,Python中集合的添加有两种方法,分别是add和update。集合add方法:a=set(I Love)a.add(python)ao,v,I,e,python,L,60,集合update方法:是把要传入的元素拆分,做为个体传入到集合中,例如:a=set(I Love)a.update(python)ah,o,p,v,t,I,e,n,y,L,61,集合元素的删除,集合删除操作方法:remove a=set(12345)a.remove(5)a1,4,3,2,62,集合的数学运算,63,本章小结,序列是Python中最基本的数据结构,其中最常见的就是元组、列表和字符串。元组是一种序列,就像列表一样。元组和列表之间的主要区别是元组不能像列表那样改变元素的值,可以简单地理解为“只读列表”。元组使用小括号()将数据包含起来,而列表使用方括号。,64,本章小结,列表中的数据可以进行任意地添加、修改和删除,同时我们还可以使用index或者find函数进行元素的查找;为了让列表保存复杂而庞大的数据内容,有的时候我们还会将列表嵌套使用,即列表中包含的元素也是列表数据类型的。,65,本章小结,除了元组和列表,字符串也是序列类型数据之一,字符串或串(String)是由数字、字母、下划线组成的一串字符,用一对引号包含。它是编程语言中表示文本的数据类型。对于序列类型的数据,必须掌握对齐进行切片操作的正确方法,当方括号中的序号为正数时代表从左往右计数,而序号为负数时,则表示该序号为从序列的尾部向头部计数得到的值,即从右往左计数的值。,66,本章小结,字典是一种通过名字来引用值的数据结构。这种类型的数据结构称为映射(Mapping)。字典是Python中唯一内建的映射类型。字典中的值(value)没有特殊的顺序,但是都存储在特定的键(key)下。和列表类似,字典中的数据也可以进行任意的添加、修改、删除,唯一不同的是我们无法使用一个序号来表示字典中的数据,而是使用键的定义。,67,本章小结,Python的集合(set)是一个无序不重复元素集,它的操作与数学中的操作方式保持一致,通过集合运算符,你也可以完成并、交、差等集合运算。,68,