Python程序设计与应用课件 第4章 序列与计算_第1页
Python程序设计与应用课件 第4章 序列与计算_第2页
Python程序设计与应用课件 第4章 序列与计算_第3页
Python程序设计与应用课件 第4章 序列与计算_第4页
Python程序设计与应用课件 第4章 序列与计算_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计与应用第4章

序列与计算学习目标知识目标理解和掌握序列分类、序列共性操作和序列内置函数;掌握字符串、列表、元组、字典和集合的创建、操作与计算方法;掌握字符串格式化方法;理解和掌握使用列表、字典与集合推导式和元组生成器推导式的方法;理解和掌握正则表达式基本语法、运算符优先级和re模块。技能目标能够灵活运用序列数据类型处理数据信息;能够结合控制结构与序列数据类型开发与设计Python应用程序;具备一定的程序优化技能。素质目标与课程思政提高使用序列数据类型解决问题的能力;培养善于观察、勤于思考的习惯,提高解决问题的分析与归纳能力,树立解决问题的工程化思想;传承中国优秀传统文化,增强文化自信。知识导图4.1序列4.1.1序列概述4.1.2序列共性操作4.1.3序列内置函数4.1.1序列概述根据序列的元素是否有序,可以将序列分为有序序列和无序序列。列表、元组和字符串属于有序序列,字典和集合属于无序序列。有序序列的元素可以按照一定的顺序进行访问和操作,而无序序列的元素没有固定的顺序,不能通过索引来访问和操作。根据序列是否可以被修改,可以将序列分为可变序列和不可变序列。列表和字典属于可变序列,元组和字符串属于不可变序列。集合可分为可变集合和不可变集合。另外,对于元组数据类型,如果元组中包含列表、字典等可变序列,那么这部分的元素可以修改。根据以上所述,序列的分类如图4-1所示,这里的集合指的是可变集合。2026/7/256图4-1序列的分类4.1.2序列共性操作:索引Python为序列提供了一些共性操作。有序序列支持索引、切片、重复、连接和比较等操作,所有序列均支持成员运算和遍历操作。1.索引Python支持字符串、列表和元组等有序序列中每个元素都可以通过索引(index),也称为下标,进行访问。Python使用一对方括号“[]”表示索引,其语法格式为:序列名[index]另外,序列可以嵌套,也支持使用索引对嵌套的序列中的元素进行访问。假设有序序列seqa中下标为i的元素是有序序列seqb,这时seqb是序列seqa中的一个元素。则对seqb中下标为j的元素进行访问的索引可以表示为:seqa[i][j]2026/7/2574.1.2序列共性操作:索引索引可分为正向索引和反向索引。正向索引中第1个元素的索引号为0,其它元素的索引号是前一个元素的索引号增1;反向索引中最后一个元素的索引号为-1,其它元素的索引号是后一个元素的索引号减1。包含n个元素的序列的正向索引和反向索引如图4-2所示。例如,字符串'HelloWorld'的正向索引和反向索引如图4-3所示。

图4-3字符串'HelloWorld'的正向索引和反向索引图4-2序列的正向索引和反向索引4.1.2序列共性操作:索引使用索引访问序列的元素时,如果索引不在正确范围内(称为越界),程序会抛出异常。例如:>>>lista=['apple','orange','grape'] #创建一个包含3个字符串的列表>>>lista[0] #访问列表的第1个元素'apple'>>>lista[0][0] #访问列表的第1个元素中的第1个元素'a'>>>lista[4] #索引越界,抛出异常IndexError:listindexoutofrange>>>tupa=(1,2,3,4,5,6,7) #创建包含7个整数型元素的元组>>>tupa[-2] #访问元组的倒数第2个元素6>>>stra='路漫漫其修远兮,吾将上下而求索'#创建一个字符串>>>stra[0] #使用正向索引访问字符串的第1个元素'路'>>>stra[-2] #使用反向索引访问字符串的倒数第2个元素'求'4.1.2序列共性操作:索引字典和集合属于无序序列,不支持使用序号的索引操作。访问字典的元素时,以“键”为下标可以访问与“键”对应的值。如果以序号为索引访问字典和集合则会抛出异常。>>>dicta={'子':'鼠','丑':'牛'} #创建包含两个元素的字典>>>dicta[1] #使用索引访问字典元素时抛出异常KeyError:1>>>dicta['丑'] #使用字典的键访问元素'牛'>>>seta={1,2,3} #创建一个集合>>>seta[1] #使用索引访问字典时,抛出异常TypeError:'set'objectisnotsubscriptable4.1.2序列共性操作:索引利用索引和赋值语句可以修改可变序列(如列表)的元素,但不可以修改不可变序列(如元组和字符串)的元素。但是,如果元组中包含列表、字典等可变序列,那么这部分的元素可以修改。>>>lista=['apple','orange','grape']>>>lista[2]='peach'>>>lista['apple','orange','peach']>>>stra[-5]='w' #修改倒数第5个字符出错TypeError:'str'objectdoesnotsupportitemassignment>>>tupa=([1,2,3],4,5)>>>tupa[0][1]=6 #修改元组中的可变序列的元素>>>tupa([1,6,3],4,5)4.1.2序列共性操作:切片2.切片通过索引可以访问有序序列的某一元素,如果想要访问有序序列的多个元素可以使用切片。切片操作不改变原序列,这是它的最大特点。与索引相同,切片也支持从正向和反向访问序列。切片的语法格式为:序列名[start:end:step]其中:①参数start和end是序列元素的索引号;参数start表示切片开始位置,默认值为0,此时可以省略;参数end表示切片截止位置,需要注意的是访问的元素不包含end位置上的元素,end默认为序列长度,此时可以省略;参数start、end和step都是整数型数值;②参数step表示切片的步长,默认值为1,此时可以省略,同时可以省略最后一个冒号;当step为负整数时,表示反向切片,这时start表示的位置应位于end表示的位置的右侧,例如,反向切片str3[-3:-5:-1]中,索引号-3位于索引号-5的右侧。4.1.2序列共性操作:切片例如:>>>stra='Believeinyourself.'>>>stra[:7]#返回stra的第0个至第7个(不包含第7个)元素,步长为1'Believe'>>>stra #切片操作不改变原字符串内容'Believeinyourself.'>>>strb="浙江省嘉兴市是红船精神的发源地">>>print(strb[7:11]) #step参数取默认值1红船精神>>>strc="人与自然和谐共生的美丽中国">>>strc[-4::] #反向索引,end参数取默认值-1,step参数取默认值1'美丽中国'>>>strc[-4:] #省略第2个和第3个参数时,可以只用一个“:”'美丽中国'>>>strc[-3:-5:-1] #反向切片'丽美'4.1.2序列共性操作:切片与索引的使用类似,利用切片和赋值语句也可以修改可变序列的元素,但不可以修改不可变序列的元素。>>>lista=[1,2,3,4,5]>>>lista[1:3]=[7,8] #切片长度与给定序列的元素个数相同>>>lista[1,7,8,4,5]>>>lista[1:3]=[9,10,11] #切片长度小于给定序列的元素个数>>>lista[1,9,10,11,4,5]>>>lista[1:3]=12 #赋值语句右侧应为可迭代对象,否则会报错TypeError:canonlyassignaniterable4.1.2序列共性操作:切片>>>lista[1:3]=[12] #切片长度大于给定序列的元素个数>>>lista[1,12,11,4,5]>>>tupa=('陶瓷','剪纸','花灯')>>>tupa[::-1] #使用切片实现序列逆序('花灯','剪纸','陶瓷')4.1.2序列共性操作:重复3.重复Python支持字符串、列表和元组等有序序列与整数的乘法(*)运算,表示序列重复,返回一个新的序列,不改变原序列,其语法格式为:序列名*n或n*序列名其中,n为整数,表示复制的次数。例如:>>>stra='abc123'>>>stra*3 #将字符串stra复制3次,返回新字符串'abc123abc123abc123'>>>stra'abc123' #重复操作不改变原来的字符串>>>lista=[1,2,3]>>>2*lista

#将列表lista复制2次,返回新列表[1,2,3,1,2,3]4.1.2序列共性操作:重复>>>lista #重复操作不改变原来的列表[1,2,3]>>>{1,2,3}*2 #集合不支持重复操作TypeError:unsupportedoperandtype(s)for*:'set'and'int'>>>{'语文':95,'数学':100}*2 #字典不支持重复操作TypeError:unsupportedoperandtype(s)for*:'dict'and'int'4.1.2序列共性操作:连接4.连接Python支持使用“+”运算符连接两个同类型的有序序列,返回一个新的序列,不改变原序列,其语法格式为:序列a+序列b例如:>>>stra='绿水'>>>strb='青山'>>>stra+strb #连接两个字符串'绿水青山'>>>print(stra,strb,sep='\t',end='#')#输出stra和strb绿水 青山#>>>['Python']+'程序设计' #不支持不同类型的序列连接TypeError:canonlyconcatenatelist(not"str")tolist4.1.2序列共性操作:成员运算5.成员运算可以使用成员运算符(in和notin)来判断序列中是否存在/不存在与某个对象相等的元素,返回True或False。如果是对字典进行成员运算,是判断字典是否存在/不存在某个键。其语法格式为:对象in序列名和对象notin序列名例如:>>>stra='德'>>>strb='国无德不兴,人无德不立'>>>strainstrb

#判断strb中是否有与stra相等的元素True4.1.2序列共性操作:成员运算>>>'He'in'HelloWorld!' #判断'HelloWorld!'中是否有与'He'相等的元素True>>>'C'in'Pythonisalanguage.' #不存在时,返回FalseFalse>>>2in[1,2,3,4,5] #列表与in运算True>>>dicta={'子':'鼠','丑':'牛'} #字典与in运算>>>'子'indictaTrue>>>'VisualFoxpro'in{'Python','Java'}#集合与in运算False>>>'VisualFoxpro'notin{'Python','Java'}#集合与notin运算True4.1.2序列共性操作:比较6.比较在Python中,两个具有相同数据类型元素的有序序列可以通过关系运算符(>、<、>=、<=、==、!=)进行比较。比较方法是:①自左向右,逐个元素进行比较;②数值型元素按照数值的大小进行比较;③字符串类型元素,按照字符的Unicode码的值决定大小;④当一个序列与另一个序列中前面部分子序列相等时,长度长的序列为大。例如:>>>'abcd'>'abed' #字符串类型按照Unicode码比较大小False>>>'abc'>'ab'#序列'ab'与序列'abc'前部分元素组成的子序列相等,长度长的序列大True4.1.2序列共性操作:比较如果待比较的两个有序序列包含的数据类型不同,则:①只要元素之间可以进行关系运算符的操作,就可以对这两个序列进行比较;②如果两个序列的元素数据类型不能比较大小,则仅支持“==”和“!=”运算,不支持其它关系运算。>>>'abcd'>'abed' #字符串类型按照Unicode码比较大小False>>>'abc'>'ab'#序列'ab'与序列'abc'前部分元素组成的子序列相等,长度长的序列大True>>>'abcd'<='abcd' #序列相等的情况True4.1.2序列共性操作:比较>>>'语'<'言' #中文组成的字符串的比较False>>>lista=[1,2,3]>>>listb=[1.0,2.0,3.0]>>>lista==listb #包含可比较的不同数据类型元素的序列进行比较True>>>listc=[2,3]>>>lista<listc #数值型元素按照数值的大小进行比较True>>>listd=['a','b','c']>>>lista!=listd #数值型元素与字符串类型元素不相等True>>>lista<listd #数值型元素与字符串类型元素不可以比较大小TypeError:'<'notsupportedbetweeninstancesof'int'and'str'4.1.2序列共性操作:遍历7.遍历序列中的元素可以通过for循环语句进行遍历,依次访问其中的每一个元素,称为迭代。能够进行迭代的对象,称为可迭代对象,所以序列都是可迭代对象。例如:>>>stra='SpringFestival'

#创建字符串>>>foriinstra: #遍历字符串元素 print(i,end='**')

S**p**r**i**n**g****F**e**s**t**i**v**a**l**>>>lista=['造纸术','指南针','火药','印刷术']

#创建列表>>>foriinlista:

#遍历列表元素 print(i,end='')

造纸术指南针火药印刷术4.1.2序列共性操作:遍历>>>tupa=('《大学》','《中庸》','《论语》','《孟子》')#创建元组>>>foriintupa: #遍历元组元素 print(i)《大学》《中庸》《论语》《孟子》4.1.2序列共性操作:遍历>>>dicta={'春季':['立春','雨水','惊蛰','春分','清明','谷雨'],'夏季':['立夏','小满','芒种','夏至','小暑','大暑'],'秋季':['立秋','处暑','白露','秋分','寒露','霜降'],'冬季':['立冬','小雪','大雪','冬至','小寒','大寒']} #创建字典

>>>foriindicta: #遍历字典元素 print(i)

春季夏季秋季冬季4.1.2序列共性操作:遍历>>>seta={1,5,2} #创建集合>>>forjinseta: #遍历集合元素 print(j)

1254.1.3序列内置函数Python提供了一些对序列进行计算的内置函数,本节课按功能分类介绍部分函数。类型转换函数序列计算函数4.1.3序列内置函数:类型转换函数函数str()、list()、tuple()、dict()和set()分别将可迭代对象转换成字符串、列表、元组、字典和集合。例如:>>>stra='北国风光,千里冰封,万里雪飘。'>>>list(stra) #将字符串转换成列表['北','国','风','光',',','千','里','冰','封',',','万','里','雪','飘','。']>>>lista=['锦','绣','江','山']>>>str(lista) #将列表转换成字符串"['锦','绣','江','山']">>>tuple(lista)#将列表转换成元组('锦','绣','江','山')>>>set(lista) #将列表转换成集合{'绣','山','锦','江'}4.1.3序列内置函数:类型转换函数需要注意的是,字典的元素为键值对,使用dict()函数进行类型转换时,待转换对象的元素应存在映射关系。例如:>>>dicta=dict([('张三',95),('李四',90),('钱五',92)]) #列表元素是具有映射关系的元组>>>dicta{'张三':95,'李四':90,'钱五':92}>>>dictb=dict((('张三',95),('李四',90),('钱五',92))) #元组元素是具有映射关系的元组>>>dictb{'张三':95,'李四':90,'钱五':92}>>>lista=['锦','绣','江','山']>>>dict(lista) #列表元素不具有映射关系,程序抛出异常ValueError:dictionaryupdatesequenceelement#0haslength1;2isrequired4.1.3序列内置函数:长度计算Python的内置函数提供了序列长度计算、最值、求和、排序、枚举、元组生成迭代器等功能。1)长度计算len()函数返回指定对象的长度,即序列包含的元素个数。例如:>>>len('千门万户曈曈日,总把新桃换旧符')#求字符串的长度15>>>len({'子':'鼠','丑':'牛'}) #求字典的长度2>>>len([1,2,[3,4]])#求列表的长度,列表作为列表中的元素时,是一个元素34.1.3序列内置函数:最值与求和2)最值与求和函数max(seq[,key][,default])、min(seq[,key][,default])和sum(seq[,start])分别用于计算有限个元素的可迭代对象中所有元素最大值、最小值以及所有元素之和。函数max()和min()要求序列元素之间可比较大小;函数sum()要求序列的元素为数值型,可选参数start的默认值为0。对于不同类型的序列,计算最值的依据不同,对于数值型元素按照数值的大小计算最值;对于字符串类型,是按字符的Unicode值计算最值;对于字典类型,是计算键的最值及和。例如:>>>max([1,2,3]) #求列表的数值型元素的最大值3>>>min((1,2,3)) #求元组的数值型元素的最小值14.1.3序列内置函数:最值与求和>>>sum([1,2,3]) #求列表的数值型元素的和6>>>sum([1,2,3],5) #求序列各元素及数值5的和11>>>max('Python') #求字符串中元素的最大值'y'>>>sum('Python') #字符串类型不支持sum()函数TypeError:unsupportedoperandtype(s)for+:'int'and'str'4.1.3序列内置函数:最值与求和函数max()和min()的default参数用来指定序列为空时,默认返回的最大值或最小值;key参数用来指定比较大小的依据或规则,可以是函数名或lambda表达式(lambda表达式的内容参见第5章)。例如:>>>max(['Python','Computer']) #按照字符串的比较规则求最值'Python'>>>max(['Python','Computer'],key=len) #按照字符串的长度求最值'Computer'>>>print(min([],default=None)) #指定最小值为空时,返回NoneNone4.1.3序列内置函数:排序3)排序sorted(seq[,key][,reverse])函数和reversed(seq)函数是Python提供的2个常用排序函数,分别实现按大小排序和对序列逆序(翻转)排序,下面对这两个函数进行详细介绍。sorted(seq[,key][,reverse])函数对序列seq进行排序并返回新列表,原序列seq不变,通过可选参数key设置排序的依据或规则,通过可选参数reverse设置排序的方式(升序或降序),默认为升序排序。特别地,对于字符串类型,是按字符的Unicode值进行排序;对于字典类型,根据键的值进行排序。>>>lista=[5,7,3,2,6]>>>sorted(lista) #默认按升序排序[2,3,5,6,7]>>>lista #原序列不变[5,7,3,2,6]>>>sorted(lista,reverse=True) #通过reverse参数实现降序排序[7,6,5,3,2]4.1.3序列内置函数:排序>>>stra='Python'>>>sorted(stra) #对字符串升序排序['P','h','n','o','t','y']>>>sorted({'Chinese':95,'Math':97}) #对字典升序排序['Chinese','Math']>>>sorted(stra,reverse=True) #对序列降序排序['y','t','o','n','h','P']>>>sorted({'Chinese':95,'Math':97},reverse=True)#对字典降序排序['Math','Chinese']4.1.3序列内置函数:排序函数reversed(seq)返回一个对序列seq进行反向翻转(首尾交换)的迭代器。迭代器可以理解为表示数据流的对象,迭代器的元素在遍历的过程中产生,每次产生一个元素,占用的内存空间少。通过类型转换函数list()、tuple()和set()可以将迭代器分别转换为列表、元组和集合。例如:>>>lista=[5,7,3,2,6]>>>itera=reversed(lista) #生成可迭代的reversed对象>>>itera #每次运行的结果可能不同<list_reverseiteratorobjectat0x000002273FB7EEC0>>>>list(itera) #转换成列表,与lista反向[6,2,3,7,5]4.1.3序列内置函数:枚举4)枚举enumerate(seq[,start])函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象。enumerate对象的每个元素是包含索引和操作序列对象seq的元素的元组,通过参数start可以设置索引的起始值,默认索引从0开始。与reversed()函数产生的迭代器相同,enumerate对象的元素在遍历的过程中产生(即惰性求值特征)。通过类型转换函数list()、tuple()和set()可以将enumerate对象分别转换为列表、元组和集合。例如:>>>itera=enumerate('Python') #枚举字符串中的元素>>>itera #查看迭代器,每次运行的结果可能不同<enumerateobjectat0x00000182BE2DE1B0>>>>list(itera) #将enumerate对象转换为列表[(0,'P'),(1,'y'),(2,'t'),(3,'h'),(4,'o'),(5,'n')]4.1.3序列内置函数:枚举>>>list(enumerate([1,2,3])) #枚举列表中的元素[(0,1),(1,2),(2,3)]>>>list(enumerate([1,2,3],2)) #将索引设置为从2开始[(2,1),(3,2),(4,3)]另外,通过for循环语句可以直接遍历enumerate对象中的元素。例如:>>>fori,jinenumerate(range(1,5)):#枚举range()对象中的元素print((i,j),end='\t')

(0,1) (1,2) (2,3) (3,4) 4.1.3序列内置函数:zip()函数5)zip()函数zip(seqa[,seqb[...]])函数的功能是返回一个元组迭代器,其中每个元组的元素由参数seqa,seqb,...中对应位置上元素组成,如同拉拉链一样。当作为参数的多个序列对象长度不同时,以最短的序列进行匹配。例如:>>>itera=zip([1,2,3]) #zip()参数个数为1>>>itera #每次运行的结果可能不同<zipobjectat0x0000011DF66FF480>>>>list(itera) #将zip对象转换为列表[(1,),(2,),(3,)]>>>tupa=tuple(zip([1,2,3],['a','b','c'])) #zip()函数有2个参数>>>y((1,'a'),(2,'b'),(3,'c'))>>>z=list(zip([1,2],['a','b','c']))

#参数的序列对象以最短的进行匹配>>>z[(1,'a'),(2,'b')]4.1.3序列内置函数:zip()函数另外,通过for循环语句可以直接遍历zip对象中的元素,例如:foriinzip((1,2,3),('a','b','c')): #创建zip对象,并访问zip对象中的元素print(i,end='\t')

(1,'a') (2,'b') (3,'c')4.2字符串4.2.1字符串创建4.2.2字符串操作与计算4.2.3字符串格式化字符串是常用的Python数据类型之一。除了可以使用运算符和内置函数对字符串进行操作,Python还提供了大量字符串对象的方法用于对字符串进行查找、切分、连接、替换和排版等操作与计算。另外,Python还提供了格式化输出字符串的方法。4.2.1字符串创建创建字符串的方法有2种:(1)使用字符串定界符(包括单引号、双引号、三个单引号和三个双引号)创建字符串,并且不同的定界符之间可以互相嵌套,通过结合赋值语句可以创建字符串变量(详见第2章有关内容)。(2)使用str()函数可以创建空字符串,并且可以将其他可迭代对象转换成字符串对象(详见4.1.3节相关内容)。注意:使用赋值语句将一个变量名赋值给另一个变量名时,两个变量指向同一字符串对象,未创建新的字符串对象。例如:>>>stra='Python';strb=stra#创建字符串类型变量stra,并将stra赋给strb>>>straisstrb #stra与strb指向同一对象True4.2.2字符串操作与计算方法也是函数,但调用方式不同,函数调用是采用func(<object>)的方式,而方法调用是采用<object>.func()方式,其中func()为函数/方法名称,<object>为操作对象。需要注意的是,字符串对象是不可变的,调用“改变”字符串的方法返回的是新字符串,原始字符串对象没有发生变化。访问和统计:find()、rfind()、index()、rindex()、count()方法s.find(sub[,start[,end]])和s.rfind(sub[,start[,end]])分别返回另一个字符串sub在当前字符串s的指定范围s[start:end](默认是整个字符串)中首次和最后一次出现的位置,如果不存在,则返回-1。方法s.index(sub[,start[,end]])和s.rindex(sub[,start[,end]])也是分别返回另一个字符串sub在当前字符串s的指定范围s[start:end](默认是整个字符串)中首次和最后一次出现的位置,与方法find()和rfind()不同的是,如果当前字符串s不存在字符串sub,则程序抛出异常。s.count(sub[,start[,end]])方法用来返回另一个字符串sub在当前字符串s中出现的次数,如果当前字符串s不存在字符串sub,则返回0。访问和统计:find()、rfind()、index()、rindex()、count()例如:>>>stra='Ifyouaredoingyourbest,youwillnothavetoworryaboutfailure.'>>>stra.find('you') #返回首次出现的位置3>>>stra.rfind('you') #返回最后一次出现的位置28>>>stra.find('you',5) #从指定位置开始查找17>>>stra.find('you',5,20) #在指定范围中进行查找17>>>stra.find('young')#查找的字符串不在当前字符串时,返回-1-1>>>stra.index('young')ValueError:substringnotfound#查找的字符串不在当前字符串时,抛出异常>>>stra.count('you') #统计字符串出现次数3拆分:split()、rsplit()、partition()、rpartition()方法s.split([sep[,maxsplit]])和s.rsplit([sep[,maxsplit]])以指定字符串sep为分隔符,分别从左向右和从右向左将当前字符串拆分成多个字符串,并返回包含拆分结果的列表。可选参数maxsplit是指定的最大拆分次数(注意,不是必须拆分的次数),默认是对整个字符串s进行拆分,当指定的最大拆分次数大于可拆分次数时,以可拆分次数进行拆分。如果不指定分隔符,则以空白符号(包括空格、换行符、制表符等)为分隔符,且把连续的多个空白字符作为一个分隔符。例如:>>>stra='a##b##c##d'>>>lsa=stra.split('#') #使用‘#’进行分隔,默认对整个字符串进行拆分>>>print(lsa)['a','','b','','c','','d']拆分:split()、rsplit()、partition()、rpartition()>>>lsb=stra.split('##') #使用‘##’进行拆分>>>print(lsb)['a','b','c','d']>>>lsc=stra.split('##',2) #指定拆分次数>>>print(lsc)['a','b','c##d']>>>lsd=stra.rsplit('##',2) #从右向左拆分字符串>>>lsd['a##b','c','d']>>>s='\n\nhello\t\tworld\n\n\n'>>>s.split() #连续的多个空白字符作为一个分隔符['hello','world']拆分:split()、rsplit()、partition()、rpartition()方法s.partition(sep)和s.rpartition(sep)分别从左往右和从右往左以遇到的第一个指定的字符串sep为分隔符,将当前字符串s拆分为3部分,即分隔符sep之前的字符串、分隔符sep和分隔符sep之后的字符串,并返回这3个字符串组成的元组。如果指定的字符串sep不在当前字符串s中,则返回当前字符串s和2个空字符串。>>>stra='富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善'>>>stra.partition(',') #从左侧开始,以“,”为分隔符,拆分为3部分('富强、民主、文明、和谐',',','自由、平等、公正、法治,爱国、敬业、诚信、友善')>>>stra.rpartition(',') #从右侧开始,以“,”为分隔符,拆分为3部分('富强、民主、文明、和谐,自由、平等、公正、法治',',','爱国、敬业、诚信、友善')>>>stra.partition(';') #指定的分隔符不在当前字符串中('富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善','','')连接:join()s.join(seq):以指定的字符串s为连接符,将序列seq中的字符串元素进行连接,形成一个新的字符串,并返回该字符串,其中,s可以为空字符串。需要注意的是,如果seq中的元素不是字符串,程序报错。例如:>>>lista=['春节','清明节','端午节','中秋节']#列表元素是字符串>>>','.join(lista)'春节,清明节,端午节,中秋节'>>>','.join('海上升明月,天涯共此时') #连接字符串对象的元素'海,上,升,明,月,,,天,涯,共,此,时'>>>lista=[1,2,3]>>>','.join(lista) #lista中的元素不是字符串,程序报错TypeError:sequenceitem0:expectedstrinstance,intfound>>>lista=['1',2,3]>>>','.join(lista) #lista包含字符串和数值型数据,程序报错TypeError:sequenceitem1:expectedstrinstance,intfound转换大小写:lower()、upper()、capitalize()、title()、swapcase()方法s.lower()、s.upper()、s.capitalize()、s.title()和s.swapcase()分别用来将字符串s转换为小写字符串、将字符串s转换为大写字符串、将字符串s首字母变为大写且其他字母为小写、将字符串s的每个单词的首字母变为大写且其他字母为小写、以及将字符串s的所有字母的大写或小写形式进行转换,并返回转换后的字符串。例如:>>>stra='PandasareOneoftheMostPreciousAnimalsintheWorld.'>>>stra.lower() #返回小写字符串'pandasareoneofthemostpreciousanimalsintheworld.'>>>print(stra) #调用方法不改变原字符串PandasareOneoftheMostPreciousAnimalsintheWorld转换大小写:lower()、upper()、capitalize()、title()、swapcase()>>>stra.upper() #返回大写字符串'PANDASAREONEOFTHEMOSTPRECIOUSANIMALSINTHEWORLD.'>>>stra.capitalize() #字符串首字母大写'Pandasareoneofthemostpreciousanimalsintheworld.'>>>stra.title() #每个单词的首字母大写'PandasAreOneOfTheMostPreciousAnimalsInTheWorld.'>>>stra.swapcase() #大小写互换'pANDASAREoNEOFTHEmOSTpRECIOUSaNIMALSINTHEwORLD.'替换:replace()、maketrans()、translate()方法s.replace(old,new[,max])将原字符串s中指定子字符串old替换为另一指定字符串new,该功能类似于MicrosoftOffice、WPSOffice、记事本等文本编辑器的“全部替换”功能。如果给定了max,则替换次数不超过max。与其它字符串对象方法一样,该方法并不修改原字符串,而是返回一个新字符串。例如:>>>stra='中国戏曲主要是由民间歌舞、说唱和滑稽戏三种不同艺术形式中合而成'>>>stra.replace('中合','综合')'中国戏曲主要是由民间歌舞、说唱和滑稽戏三种不同艺术形式综合而成'替换:replace()、maketrans()、translate()方法str.maketrans(intab,outtab)和s.translate(table)通常组合使用。方法maketrans()用来创建字符映射表。字符映射表是字典数据类型,字典的键是字符串intab中字符的Unicode码,字典的值是字符串outtab中对应字符的Unicode码。intab和outtab必须长度相等且一一对应。translate()根据字符映射表转换字符串。使用这2个方法可以同时处理多个不同的字符。例如:>>>intab='abc'>>>outtab='123'>>>table=str.maketrans(intab,outtab)#创建字符映射表>>>table#'a'的Unicode码是97,'1'的Unicode码是49,可使用ord()函数进行验证{97:49,98:50,99:51}>>>stra='bac'>>>stra.translate(table) #按字符映射表进行转换'213'删除空白或指定字符:strip()、rstrip()、lstrip()方法s.strip([chars])、s.rstrip([chars])和s.lstrip([chars])这3个方法分别用来删除字符串两端、右端和左端的空白字符(默认情况下)或指定字符(通过可选参数chars指定)。例如:>>>s='\n\tPythonisaprogramminglanguage.\n\n'>>>s.strip()

#删除两端的空白字符'Pythonisaprogramminglanguage.'>>>s='aaaPythonccc'>>>s.rstrip('a')

#删除字符串右侧指定字符'aaaPythonccc'>>>s.lstrip('a') #删除字符串左侧指定字符'Pythonccc'删除空白或指定字符:strip()、rstrip()、lstrip()需要注意的是,这3个方法指定的字符串不是作为一个整体对待,而是在当前字符串相应位置删除参数字符串中包含的所有字符,直至遇到不包含在指定字符串中的字符为止。>>>s='aaaPythonccc'>>>s.rstrip('ac')'aaaPython'判断开始、结束字符串:startswith()、endswith()方法s.startswith(sub[,start[,end]])和s.endswith(sub[,start[,end]])分别用来判断字符串s是否以指定字符串sub开始或结束,返回逻辑值。通过可选参数start和end可以限定在字符串s中的检测范围。例如:>>>stra='TheSpringFestival,ChineseNewYear,isthemostimportantfestivalforallofus.'>>>stra.startswith('The') #检测整个字符串True>>>stra.startswith('The',5) #指定检测范围的起始位置False>>>stra.startswith('The',0,10) #指定检测范围的起始和结束位置

True另外,这2个方法还可以接收元素为字符串的元组作为参数,例如:

>>>stra='TheSpringFestival,ChineseNewYear,isthemostimportantfestivalforallofus.'>>>stra.startswith(('The','pr'),5)#检测字符串s的指定范围内是否以'The'或'pr'开始True判断字母、数字、空格、大小写:isalnum()、isalpha()、isdigit()、isspace()、isupper()、islower()方法s.isalnum()、s.isalpha()、s.isdigit()、s.isspace()、s.isupper()和s.islower()分别用来判断字符串s的字符是否为整数字符或字母、是否为字母、是否为整数字符、是否为空白字符、是否为大写字母以及是否为小写字母,返回逻辑值True或False。例如:>>>'WPS2023'.isalnum() #判断是否全部为整数字符或字母False>>>'WPS2023'.isalnum() #判断是否全部为整数字符或字母True>>>'Python'.isalpha() #判断是否全部为字母True>>>'Pythonisalanguage'.isalpha() #判断是否全部为字母False判断字母、数字、空格、大小写:isalnum()、isalpha()、isdigit()、isspace()、isupper()、islower()>>>'12345'.isdigit() #判断是否全部为整数字符True>>>'12345.6'.isdigit() #判断是否全部为整数字符False>>>'Pythonisalanguage'.isspace()#判断是否全部为空白字符False>>>'PYTHON'.isupper() #判断是否全部为大写字母True>>>'Python'.isupper() #判断是否全部为大写字母False>>>'python'.islower() #判断是否全部为小写字母True字符串对齐:center()、ljust()、rjust()方法center()、ljust()和rjust()用于对字符串进行排版,返回指定宽度的新字符串,通过调用这3个方法原字符串分别居中、左对齐或右对齐出现在新字符串中,如果指定的宽度大于原字符串长度,则使用指定的字符(默认是空格)进行填充。例如:>>>'Mid-AutumnFestival'.center(30) #居中,两端默认以空格进行填充'Mid-AutumnFestival'>>>'Mid-AutumnFestival'.center(30,'-') #居中,两端以‘-’进行填充'-----Mid-AutumnFestival------'>>>'Mid-AutumnFestival'.ljust(30,'#') #左对齐,右侧以‘#’进行填充'Mid-AutumnFestival###########'>>>'Mid-AutumnFestival'.rjust(30,'=') #右对齐,左侧以‘=’进行填充'===========Mid-AutumnFestival'4.2.3字符串格式化在Python中,按照一定格式标准(如对齐方式、数值的精度)输出字符串的方法有3种:使用%运算符;使用format()方法;使用f-字符串。1.使用%运算符进行字符串格式化使用%运算符号格式化字符串的形式如下:'%[-][+][0][m][.n]格式字符'%expression说明如下:①第2个“%”为格式运算符,其之前的部分为格式字符串(以第1个“%”开始),之后的部分为需要进行格式化输出的待转换的表达式;②

[-]:指定左对齐输出;③

[+]:对正数加正号;④

[0]:指定空位填充0;⑤

[m]:指定最小宽度;⑥

[.n]:指定精度;⑦格式字符:指定类型;⑧

expression:待转换的表达式4.2.3字符串格式化其中,格式字符规定了要转换的类型,Python支持大量的格式字符,常用的格式字符及其说明如下表所示。格式字符说明%s字符串%c单个字符%d、%i十进制整数%o八进制整数%x十六进制整数%e指数(基底写为e)%E指数(基底写为E)%f、%F浮点数%g指数(e)或浮点数(根据显示长度)

%G指数(E)或浮点数(根据显示长度)

%%格式化为一个“%”符号4.2.3字符串格式化使用这种方式进行字符串格式化时,要求被格式化的内容和格式字符之间的数量和顺序都必须一一对应。要对多个对象进行格式化时,可以将这些对象组成一个元组进行传递。例如:>>>var=255>>>'%o'%var #格式化为八进制整数'377'>>>'%8o'%var #宽度设置为8'377'>>>'%-8o'%var #指定左对齐输出'377'>>>'%+8o'%var #对正数加正号'+377'>>>"%x"%var #格式化为十六进制整数'ff'4.2.3字符串格式化>>>"%e"%var #格式化为指数形式'2.550000e+02'>>>'%d,%x'%(65,65) #使用元组格式化,按位置将格式字符与待转换的对象进行对应'65,41'>>>'%8.2f'%x #格式化为宽度为8、精度为2的浮点数'255.00'>>>'%08.2f'%x#格式化为宽度为8、不足8位用0填充、精度为2的浮点数'00255.00'>>>''%s'%set(range(2))#把集合格式化为字符串'{0,1}'4.2.3字符串格式化2.使用format()方法进行字符串格式化使用Python提供的format()方法能够更加灵活方便地进行字符串格式化,其语法格式为:s.format(对象0,对象1,…)其中,s是需要格式化的字符串。s中包含一系列槽({序号:格式控制标记})作为占位符。槽内的序号表示输出format()方法参数的第几个对象,当序号与待输出的对象按位置依次对应时,可省略序号;槽内的冒号(:)是引导符号。槽内的格式控制标记包括6个可选字段:<填充><对齐><宽度><,><.精度><类型>,这些字段可以组合使用,各字段的说明如表

所示。<填充><对齐><宽度><,><.精度><类型>用于填充的单个字符<左对齐>右对齐^居中输出宽度数制的千分分隔符,适用于整数和浮点数浮点数的精度或字符串的最大输出长度整数类型b、c、d、o、x、X;浮点数类型e、E、f、%(百分)4.2.3字符串格式化例如:>>>"{}{}{}".format("圆周率:",3.141592,"...") #按顺序接收参数'圆周率:3.141592...'>>>"{1}{0:.2f}".format(3.141592,"圆周率:")#按索引接收参数,输出精度为2的浮点数'圆周率:3.14'除了按位置接收待转换的参数,也可按照关键字进行接收。>>>"姓名:{name},分数:{score}".format(name='张三',score=90)#按关键字接收参数'姓名:张三,分数:90'由于format()方法不要求用于格式控制的槽与待格式化的对象之间按照顺序严格一致,因此,相比使用“%”运算符的字符串格式化方法,更加灵活方便。4.2.3字符串格式化3.使用f-字符串进行格式化从Python3.6.x开始,Python支持一种新的字符串格式化方法,官方称为FormattedStringLiterals(格式化字符串常量),其含义与字符串对象的format()方法类似,但形式更加简洁。该方法是在字符串前面加字母f或F,简称f-字符串,其格式为:f’xxx’或F’xxx’字符串中槽({})里面包含待转换对象的名称。如果当前作用域中没有该对象的定义,则抛出异常。大括号和里面的变量名表示占位符,在进行格式化时,使用前面定义的同名变量的值对格式化字符串中的占位符进行替换。例如:>>>Province='Zhejiang'>>>capital='Hangzhou'>>>f'Thecapitalof{Province}Provinceis{capital}''ThecapitalofZhejiangProvinceisHangzhou'4.2.3字符串格式化>>>fillchar='0'>>>width=10>>>precision=3>>>value=2/3>>>f'result:{value:{fillchar}{width}.{precision}}''result:000000.667'>>>f'Theradiusofthecircleis{radius}.'NameError:name'radius'isnotdefined#没有radius对象,抛出异常>>>width=10>>>precision=4>>>value=11/3>>>f'result:{value:{width}.{precision}}''result:3.7'>>>f'myaddressis{address}' #没有address变量,抛出异常NameError:name'address’isnotdefined4.3列表4.3.1列表创建4.3.2列表操作与计算4.3.3列表推导式列表包含若干元素,占用连续的内存空间。在形式上,列表的所有元素放在一对方括号“[]”中,相邻元素之间使用逗号分隔,没有任何元素的列表称为空列表。同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数等基本类型的元素,也可以包含字符串、列表、元组、字典和集合等序列。4.3.1列表创建创建列表的方法有4种:使用方括号“[]”;使用list()函数;使用copy()方法进行浅拷贝;使用列表推导式。1.使用方括号“[]”将列表元素使用方括号“[]”括起来即可创建列表,结合赋值语句可创建列表变量,例如:>>>lista=[] #创建空列表,并赋给变量lista>>>listb=[1,3.14,20]#创建包含整型和浮点型数据的列表,并赋给变量listb>>>listc=['鲁菜','川菜','粤菜','苏菜']#创建包含字符串元素的列表>>>listc['鲁菜','川菜','粤菜','苏菜']>>>listd=[1,'高级程序设计语言',['Python','C++']] #创建包含多种数据类型的列表4.3.1列表创建2.使用list()函数使用list()函数也可创建空列表,例如:>>>lista=list()>>>lista[]另外,list()函数可以将字符串、元组、迭代器等可迭代对象转换成列表,详见4.1.3节。3.使用copy()方法进行浅拷贝使用copy()方法可以对列表进行浅拷贝,与使用赋值语句复制列表的不同之处是,该方法生成的新变量与原来的变量不指向同一对象,对于列表中的数值型元素,copy()方法实现的是值复制,改变一个变量的数值型元素时,另一变量的对应元素不变,而对于列表中的序列类型元素(如列表、字典等),copy()方法实现的是引用复制,改变一个变量的序列类型元素时,另一变量的对应元素也发生改变。例如:4.3.1列表创建>>>lista=[1,2,3,['a','b','c']]>>>listb=lista.copy() #浅拷贝>>>listb[1,2,3,['a','b','c']]>>>listaislistb #判断是否是同一对象False>>>listb[1]=5 #改变listb的整型元素>>>listb[1,5,3,['a','b','c']]>>>lista #lista的整型不变[1,2,3,['a','b','c']]>>>listb[3][0]='d' #改变listb的列表元素>>>listb[1,5,3,['d','b','c']]>>>lista #lista的列表元素不变[1,2,3,['d','b','c']]4.3.1列表创建4.使用列表推导式使用列表推导式也可以生成列表,例如:>>>lista=[x**3forxinrange(5)]#创建0-5(不包含5)的整数的立方组成的列表>>>lista[0,1,8,27,64]关于列表推导式的内容将在4.3.3节进行详细介绍。4.3.1列表创建注意:使用赋值语句可以将一个列表变量赋给另一个列表变量,此时这两个列表变量指向同一个列表对象,未创建新的列表对象,例如:>>>lista=[1,2,3] #创建一个列表并赋给变量lista>>>listb=lista #将lista赋给listb>>>id(lista) #lista的地址,每次运行的结果可能不同1493229169792>>>id(listb) #listb的地址,与lista相同1493229169792>>>listaislistb #是同一对象True>>>listb[1]=5 #修改listb的元素>>>lista #lista的元素也发生改变[1,5,3]4.3.2列表操作与计算列表除了支持前面介绍的序列共性操作与内置函数以外,还提供了列表对象的方法以实现对列表对象的操作。1.访问元素lst.index(x[,i][,j])方法用于返回与指定数据x相等的元素在列表lst中首次出现的位置,如果列表中不存在此元素,则程序抛出异常。例如:>>>lista=[1,2,3,2,2]>>>lista.index(2) #返回列表lista中首次出现元素值为2的位置1>>>lista.index(4) #列表lista中没有元素4,程序报错ValueError:4isnotinlist4.3.2列表操作与计算2.增加元素lst.append(x)、lst.extend(iter)和lst.insert(i,x)方法都可以向列表添加元素,但参数的个数、数据类型、元素添加的数量和位置存在差异。append()方法用于向列表尾部追加一个元素,参数是要添加的元素;insert()方法用于向列表任意指定位置插入一个元素,参数是待插入的位置和元素;extend()方法的参数是可迭代对象,用于向列表lst尾部追加可迭代对象iter中的所有元素。例如:>>>lista=['礼']>>>lista.append('射') #在尾部追加值为'射'的元素

>>>lista['礼','射']4.3.2列表操作与计算>>>lista.insert(1,'乐') #在索引为1的位置追加值为'乐'的元素

>>>lista['礼','乐','射']>>>lista.extend(['御','书']) #在尾部追加列表中每个元素>>>lista['礼','乐','射','御','书']>>>listb=['数']>>>lista.extend(listb) #序列名作为参数>>>lista['礼','乐','射','御','书','数']>>>listb #作为extend()方法的参数的内容不变['数']4.3.2列表操作与计算3.删除元素lst.pop([i])方法的参数i是可选的,i缺省时,删除并返回最后一个元素,如果指定了i,则删除并返回位置i处的元素。如果指定位置i不是正确的索引,则程序报错。lst.remove(x)方法用于删除列表中第一个与指定值x相等的元素,没有返回值,如果列表中不存在指定元素,则程序报错。例如:>>>lista=['《诗经》','《尚书》','《礼记》','《周易》','《春秋》']>>>lista.pop() #删除并返回最后位置的元素'《春秋》'>>>lista #pop()方法改变了列表['《诗经》','《尚书》','《礼记》','《周易》']>>>lista.pop(1) #删除并返回索引号为1的元素'《尚书》'>>>lista.pop(9)

温馨提示

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

评论

0/150

提交评论