Python语言程序设计(第2版)(含视频教学) 课件 第5、6章 字符串与文本分析、列表与元组_第1页
Python语言程序设计(第2版)(含视频教学) 课件 第5、6章 字符串与文本分析、列表与元组_第2页
Python语言程序设计(第2版)(含视频教学) 课件 第5、6章 字符串与文本分析、列表与元组_第3页
Python语言程序设计(第2版)(含视频教学) 课件 第5、6章 字符串与文本分析、列表与元组_第4页
Python语言程序设计(第2版)(含视频教学) 课件 第5、6章 字符串与文本分析、列表与元组_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

第5章字符串与文本分析字符串编码字符串的索引与分片字符串的操作字节类型正则表达式字符串应用举例文本分析1.Unicode码Unicode编码标准为表达全世界所有语言的任意字符而设计,它使用4字节的数字编码来表达每个字母、符号或文字。每个数字编码代表唯一的至少在某种语言中使用的符号,被几种语言共用的字符通常使用相同的数字来编码,每个字符对应一个数字编码,每个数字编码对应一个字符,即不存在二义性。5.1字符串编码2.UTF-8码UTF-8是一种为Unicode字符设计的变长编码系统,即不同的字符可使用不同数量的字节编码。对于ASCII字符,UTF-8仅使用1个字节来编码。UTF-8支持中英文编码,英文系统也可以显示中文。Python支持UTF-8编码,中文字符、希腊字母均可以作为标识符使用。例如:>>>π=3.14159>>>国家='中国'3.Unicode码与UTF-8码的转换在Python中,可以通过字符串的encode()方法从Unicode编码为指定编码方式。decode()方法从指定编码方式解码为Unicode方式。例如:>>>s='汉字ABC'>>>k=s.encode('utf-8')>>>kb'\xe6\xb1\x89\xe5\xad\x97ABC'>>>k.decode('utf-8')'汉字ABC'5.2.1字符串的索引为了实现索引,需要对字符串中的字符进行编号,最左边字符编号为0,最右边字符的编号比字符串的长度小1。Python还支持在字符串中使用负数从右向左进行编号,最右边的字符(即倒数第1个字符)的编号为-1。字符串变量名后接用中括号括起来的编号即可实现字符串的索引。5.2字符串的索引与分片例如:>>>s="Hello"字符串s中各个字符的索引编号如图所示。例5-1将一个字符串中的字符按逆序打印出来。分析:先输出字符串的最后一个字符,且不换行,然后输出倒数第2个字符,同样不换行,一直到第1个字符。利用for循环控制字符索引编号,循环赋值目标变量从0变化到字符串的长度。取字符串的长度可以利用len()函数。程序如下:s1=input("Pleaseenterastring:")foriinrange(0,len(s1)):print(s1[len(s1)-1-i],end='')5.2.2字符串的分片字符串的分片就是从给定的字符串中分离出部分字符,这时可以使用以下形式的字符串索引编号。i:j:k其中i是索引起始位置,j是索引结束位置但不包括j位置上的字符,索引编号每次增加的步长为k。例如:>>>s="HelloWorld!">>>print(s[0:5:2])Hlo>>>s='abcdefg'>>>s[5:1:-1]'fedc'>>>s[-len(s):-1]'abcdef'例5-2利用字符串分片方法将一个字符串中的字符按逆序打印出来。程序如下:s1=input("Pleaseenterastring:")s2=s1[::-1]print(s2)5.3.1字符串连接操作1.基本连接操作字符串表达式是指用“连接”运算符把字符串常量、字符串变量等字符串数据连接起来的有意义的式子,它的一般格式是:s1+s2+……+sn其中s1,s2,……,sn均是一个字符串,表达式的值也是一个字符串。例如:>>>"Sub"+"string"'Substring'5.3字符串的操作2.重复连接操作Python提供乘法运算符(*),构建一个由其自身字符串重复连接而成的字符串。字符串重复连接的一般格式是:s*n或n*s其中s是一个字符串;n是一个正整数,代表重复的次数。例如:>>>"ABCD"*2'ABCDABCD'例5-3从键盘输入5个字符串,将它们连接成一个字符串后输出。s=''foriinrange(0,5):c=input("Pleaseenterastring:")s+=cprint(s)3.连接操作的其他实现对于连接操作,可以用格式化操作符或join()函数取代,这样只会有一次内存的申请,以提高操作效率。例如:>>>'{:s}{:s}{:s}'.format('Python','','Program')'PythonProgram'>>>''.join(['Python','','Program'])'PythonProgram'5.3.2字符串逻辑操作1.关系操作在进行字符串数据的比较时,遵循以下规则。(1)单个字符比较,按字符ASCII码大小进行比较。(2)两个相同长度的字符串的比较是将字符串中的字符从左向右逐个比较,如果所有字符都相等,则两个字符串相等,如果两个字符串中有不同的字符,以最左边的第1对不同字符的比较结果为准。(3)若两个字符串中字符个数不等时,则将较短的字符串后面补足空格后再比较。例5-4从键盘输入10个英文单词,输出其中以元音字母开头的单词。分析:输入一个英文单词,并进行判断,用for循环控制重复执行10次。可以将所有元音字母构成一个字符串,遍历该字符串中的各个字符,并判断单词的首字母。2.成员关系操作字符串的成员关系操作包括in和notin操作,一般格式为:字符串1[not]in字符串2该操作用于判断字符串1是否属于字符串2,其返回值为True或False.例如:>>>'a'in'abc'True5.3.3字符串的常用方法函数可以通过函数名直接调用,如ord('A'),而对象中的方法则要通过对象名和方法名来调用,一般形式为:对象名.方法名(参数)在Python中,字符串类型(String)可以看成是一个类(Class),而一个具体的字符串可以看成是一个对象,该对象具有很多方法,这些方法是通过类的成员函数来实现的。1.字母大小写转换s.upper():全部转换为大写字母。s.lower():全部转换为小写字母。s.swapcase():字母大小写互换。s.capitalize():首字母大写,其余小写。s.title():首字母大写。例5-5字母大小写转换函数使用示例。程序如下:s='PythonProgram'print('{:s}lower={:s}'.format(s,s.lower()))print('{:s}upper={:s}'.format(s,s.upper()))print('{:s}swapcase={:s}'.format(s,s.swapcase()))print('{:s}capitalize={:s}'.format(s,s.capitalize()))print('{:s}title={:s}'.format(s,s.title()))2.字符串对齐处理s.ljust(width,[fillchar]):输出width个字符,s左对齐,右边不足部分用fillchar填充,默认用空格填充。s.rjust(width,[fillchar]):输出width个字符,s右对齐,左边不足部分用fillchar填充,默认用空格填充。s.center(width,[fillchar])输出width个字符,s中间对齐,两边不足部分用fillchar填充,默认用空格填充。s.zfill(width):把s变成width长,并且右对齐,左边不足部分用0补齐。例5-6字符串对齐处理函数使用示例。程序如下:s='PythonProgram'print('{:s}ljust={:s}'.format(s,s.ljust(20)))print('{:s}rjust={:s}'.format(s,s.rjust(20)))print('{:s}center={:s}'.format(s,s.center(20)))print('{:s}zfill={:s}'.format(s,s.zfill(20)))3.字符串搜索s.find(substr,[start,[end]]):返回s中出现substr的第1个字符的编号,如果s中没有substr则返回-1。start和end作用就相当于在s[start:end]中搜索。s.index(substr,[start,[end]]):与find()相同,只是在s中没有substr时,会返回一个运行时错误。s.rfind(substr,[start,[end]]):返回s中最后出现的substr的第1个字符的编号,如果s中没有substr则返回-1,也就是说从右边算起的第1次出现的substr的首字符编号。3.字符串搜索s.rindex(substr,[start,[end]]):与rfind()相同,只是在s中没有substr时,会返回一个运行时错误。s.count(substr,[start,[end]]):计算substr在s中出现的次数。s.startswith(prefix[,start[,end]]):是否以prefix开头,若是返回True,否则返回False。s.endswith(suffix[,start[,end]]):以suffix结尾,若是返回True,否则返回False。例5-7字符串搜索函数使用示例。程序如下:s='PythonProgram'print('{:s}findnono={:d}'.format(s,s.find('nono')))print('{:s}findt={:d}'.format(s,s.find('t')))print('{:s}findtfrom{:d}={:d}'.format(s,1,s.find('t',1)))print('{:s}findtfrom{:d}to{:d}={:d}'.format(s,1,2,s.find('t',1,2)))print('{:s}rfindt={:d}'.format(s,s.rfind('t')))print('{:s}countt={:d}'.format(s,s.count('t')))4.字符串替换s.replace(oldstr,newstr,[count]):把s中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换。s.strip([chars]):把s中前后chars中有的字符全部去掉,可以理解为把s前后chars替换为None。默认去掉前后空格。s.lstrip([chars]):把s左边chars中有的字符全部去掉。默认去掉左边空格。s.rstrip([chars]):把s右边chars中有的字符全部去掉。默认去掉右边空格。s.expandtabs([tabsize]):把s中的tab字符替换为空格,每个tab替换为tabsize个空格,默认是8个。例5-8字符串替换函数使用示例。程序如下:s='PythonProgram'print('{:s}replacetto*={:s}'.format(s,s.replace('t','*')))print('{:s}replacetto*={:s}'.format(s,s.replace('t','*',1)))print('{:s}strip={:s}'.format(s,s.strip()))print('{:s}strip={:s}'.format(s,s.strip('Pm')))5.字符串的拆分与组合s.split([sep,[maxsplit]]):以sep为分隔符,把字符串s拆分成一个列表。默认的分隔符为空格。maxsplit表示拆分的次数,默认取-1,表示无限制拆分。s.rsplit([sep,[maxsplit]]):从右侧把字符串s拆分成一个列表。s.splitlines([keepends]):把s按行拆分分为一个列表。keepends是一个逻辑值,如果为True,则每行拆分后会保留行分隔符。s.partition(sub):从sub出现的第1个位置起,把字符串s拆分成一个3元素的元组(sub左边字符,sub,sub右边字符)。如果s中不包含sub则返回(s,'','')。s.rpartition(sub):从右侧开始,把字符串s拆分成一个3元素的元组(sub左边字符,sub,sub右边字符)。如果s中不包含sub则返回('','',s)。s.join(seq):把seq代表的序列组合成字符串,用s将序列各元素连接起来。字符串中的字符是不能修改的,如果要修改,通常的方法是,用list()函数把字符串s变为以单个字符为成员的列表(使用语句s=list(s)),再使用给列表成员赋值的方式改变值(如s[3]='a'),最后再使用语句“s="".join(s)”还原成字符串。例5-9字符串拆分与组合函数使用示例。程序如下:s='abcde'print('{:s}split={}'.format(s,s.split()))s='a-b-c-de'print('{:s}split={}'.format(s,s.split('-')))print('{:s}partition={}'.format(s,s.partition('-')))6.字符串类型测试字符串类型测试函数返回的都是逻辑值。s.isalnum():是否全是字母和数字,并至少有一个字符s.isalpha():是否全是字母,并至少有一个字符s.isdigit():是否全是数字,并至少有一个字符s.isspace():是否全是空格,并至少有一个字符s.islower():s中的字母是否全是小写s.isupper():s中的字母是否便是大写s.istitle():s是否是首字母大写例5-10字符串测试函数使用示例。程序如下:s='PythonProgram'print('{:s}isalnum={}'.format(s,s.isalnum()))print('{:s}isalpha={}'.format(s,s.isalpha()))print('{:s}isupper={}'.format(s,s.isupper()))print('{:s}islower={}'.format(s,s.islower()))print('{:s}isdigit={}'.format(s,s.isdigit()))s='3423'print('{:s}isdigit={}'.format(s,s.isdigit()))字符串是由Unicode字符组成的序列,用str类型符表示。字节类型是由编码介于0~255之间的字符组成的序列,分为不可变字节类型和可变字节类型,分别用bytes类型符和bytearry符表示。在字符串前面加“b”可以定义bytes对象。bytes对象中的每一个字符可以是一个ASCII字符或\x00~\xff的十六进制数。例如>>>by=b'abcd\x65'>>>byb'abcde'>>>type(by)<class'bytes'>5.4字节类型和字符串一样,可以使用内置的len()函数求bytes对象的长度,也可以使用“+”运算符连接两个bytes对象,其操作结果是一个新的bytes对象。可以使用索引来访问bytes对象中的某一个字符。对字符串做这种操作获得的元素仍为字符串,而对bytes对象做这种操作的返回值则为整数。此外,bytes对象是不可改变的,不能对其赋值。如果需要改变某个字节,可以组合使用字符串的分片和连接操作(效果跟字符串是一样的),也可以将bytes对象转换为bytearray对象,bytearray对象是可以被修改的。字符串与字节类型之间存在联系。bytes对象有一个decode()方法,它使用某种字符编码作为参数,然后依照这种编码方式将bytes对象转换为字符串,对应地,字符串有一个encode()方法,它也使用某种字符编码作为参数,然后依照它将串转换为bytes对象。5.5.1正则表达式元字符正则表达式由普通字符和元字符组成。普通字符是正常的文本字符,具有字符的本来含义。元字符(metacharacter)具有特定的含义,它使正则表达式具有通用的匹配能力。5.5正则表达式下面是一些常用的正则表达式例子。(1)匹配帐号是否合法(设帐号以字母开头,允许字母、数字及下划线,包括5~16个字符):^[a-zA-Z][a-zA-Z0-9_]{4,15}$。(2)匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7},例如0746-4405222。(3)匹配QQ号(设QQ号从10000开始):[1-9][0-9]{4,}。(4)匹配身份证(设身份证为15位或18位):\d{15}|\d{18}。(5)匹配特定数字。^[1-9]\d*$:匹配正整数。^-[1-9]\d*$:匹配负整数。^-?[1-9]\d*$:匹配整数。(6)匹配特定字符串。^[A-Za-z]+$:匹配由26个英文字母组成的字符串。^[A-Z]+$:匹配由26个大写英文字母组成的字符串。^[a-z]+$:匹配由26个小写英文字母组成的字符串。^[A-Za-z0-9]+$:匹配由数字和26个英文字母组成的字符串。^\w+$:匹配由数字、26个英文字母或者下划线组成的字符串。5.5.2正则表达式模块1.生成正则表达式对象使用re模块的一般步骤是先使用compile()函数将正则表达式的字符串形式编译为正则表达式对象,然后使用正则表达式对象提供的方法进行字符串处理。compile()函数的一般调用格式是:pile(pattern[,flag])其中,参数pattern是代表匹配模式的正则表达式。flag是匹配选项标志。2.字符匹配和搜索1)match()函数如果没有生成正则表达式对象,使用match()函数可以直接进行正则表达式的匹配。该函数的调用格式是:re.match(pattern,string[,flag])其中参数pattern是代表匹配模式的正则表达式,string是要匹配的字符串,flag是匹配选项标志,可取的值与compile()函数的匹配选项标志相同。2)search()函数如果想要搜索整个字符串来寻找匹配,应当用search()函数。search()函数也有两种调用格式:re.search(pattern,string[,flag])search(string[,pos[,endpos]])参数的含义与match()函数相同。在字符串中查找匹配正则表达式模式的位置,返回match对象,如果没有找到匹配的位置,则返回None。3)findall()函数findall()函数搜索字符串,以列表形式返回全部能匹配正则表达式的子串。该函数也有两种调用格式。re.findall(pattern,string[,flag])findall(string[,pos[,endpos]])参数的含义与match()函数相同。4)finditer()函数findall()函数类似,在字符串中找到正则表达式所匹配的所有子串,并组成一个迭代器返回。该函数也有两种调用格式。re.finditer(pattern,string[,flag])finditer(string[,pos[,endpos]])参数的含义与match()函数相同。3.字符替换re模块的sub()函数、subn()函数,或正则表达式对象的同名方法,使用正则表达式匹配字符串,用指定内容替换结果,并返回替换后的字符串。sub()函数的两种调用格式是:re.sub(pattern,repl,string[,count,flag])sub(repl,string[,count=0])该函数在字符串string中找到匹配正则表达式pattern的所有子串,用另一个字符串repl进行替换。如果没有找到匹配pattern的串,则返回未被修改的string。repl既可以是字符串也可以是一个函数。count用于指定最多替换次数,不指定时全部替换。4.字符拆分re模块的split()函数或正则表达式对象的同名方法,使用正则表达式匹配字符串,并拆分字符串,返回拆分后的字符串列表。split()函数的两种调用格式是:re.split(pattern,string[,maxsplit,flag])split(string[,maxsplit])其中参数maxsplit用于指定最大拆分次数,不指定将全部拆分。5.escape()函数re模块还提供了一个escape(string)函数,用于将string中的正则表达式特殊字符之前加上转义符再返回。如果字符串很长且包含很多特殊字符,为避免输入大量反斜杠,可以使用这个函数。5.6字符串应用举例例5-11输入一个字符串,每次去掉最后面的字符并输出。程序如下:s=input()foriinrange(-1,-len(s),-1):print(s[:i])例5-12翻译密码。分析:依次取电文中的字符,对其中的字母进行处理,对字母之外的字符维持原样。取字母的ASCII代码,加上5,再按其ASCII码转换为另一个字母。还有一个问题要处理,当字母为“V”时,加5就超过了“Z”,故应使之转换为“A”,同理,“W”→“B”,“X”→“C”,“Y”→“D”,“Z”→“E”。例5-13Python的标识符以字母或下划线(_)开头,后接字母、数字或下划线组成,从键盘输入字符串,判断它是否Python的标识符。分析:利用string模块中的常量,包括string.digits(数字0~9)、string.ascii_letters(所有大小写字母)、string.ascii_lowercase(所有小写字母)、string.ascii_uppercase(所有大写字母)。先输入字符串,再分别判断首字符和中间字符,并给出提示。判断中间字符利用for循环遍历字符串。也可以构造一个正则表达式来匹配所有合法的Python标识符。例5-14从键盘输入几个数字,用逗号分隔,求这些数字之和。分析:输入的数字当作一个字符串来处理,首先分离出数字串,再转换成数值,这样就能求和。也可以使用正则表达式来实现。5.7.1网络数据获取1.数据采集与普通数据相比,网络数据具有明显的特点,一是来源广、数据量大、实时性和开放性强,二是数据类型和语义丰富、弱规范性和非结构化数据多。对于这类数据,网络爬虫技术是一种重要的采集手段。5.7文本分析网络爬虫(Webcrawler)又称为网络蜘蛛(Webspider),是一种按照一定的规则自动抓取网页信息的程序或脚本。网络爬虫的工作流程包括抓取网页源代码、解析网页内容、存储数据等步骤。要抓取网页通常有两个库,一个是Python内置的urllib库,一个是requests第三方库。requests是一个第三方库,先要进行安装,然后在Python环境下导入库,再调用get()函数获取到特定网页的信息。2.信息提取通过调用requests库函数,可以得到网页资源。此时,可以将其作为普通文本,采用正则表达式进行信息提取。5.7.2中文分词与词频统计文本分析的主要过程包括分词、去停用词、特征提取、建模分析等。1.分词与分词模式在Python中,可以利用第三方库jieba来实现分词操作。jieba支持以下三种分词模式。(1)精确模式:将文本精确地分开,不存在冗余单词,适合做文本分析。(2)全模式:把文本中所有可能的词语都切分出来,存在冗余单词。(3)搜索引擎模式:在精确模式的基础上,对长词再次进行切分,适合用于搜索引擎分词。2.词频统计词频统计是文本分析中常见的工作,它可以帮助了解文本中各个词汇出现的频率及其分布情况。可以使用Python内置库collections中的Counter()函数进行词频统计。Counter()函数统计列表中元素出现的次数,返回一个字典,其中关键字是元素,值是元素出现的次数。还可以输出词频最高的词语。5.7.3中文词云图制作在Python中,可以通过第三方库wordcloud来制作词云图,基本步骤如下。(1)安装并导入wordcloud库。(2)使用wordcloud库的WordCloud()函数根据参数创建WordCloud对象。(3)使用WordCloud对象的generate(txt)方法将文本数据txt(会根据空格分词)转换为词云图。(4)使用WordCloud对象的to_file()方法将词云图保存为图像文件(png或jpg格式)。例5-15新闻热词分析。对人民网()经济与科技专栏的信息进行爬取,并分析其中的新闻热词,绘制词云图。分析:首先采用requests库的get方法进行资源获取。由于这里仅进行新闻热词分析,非中文字符没有价值,可以将其全部剔除。然后进行分词。为排除干扰,仍然需要将没有太大意义的单字符词语去掉。最后绘制并显示词云图。此外,使用背景图片使得词云更加美观。第6章列表与元组序列的通用操作列表的专用操作元组与列表的比较序列的应用6.1序列的通用操作6.1.1序列的索引与分片1.序列的索引序列中的每一个元素被分配一个位置编号,称为索引(index)。第一个元素的索引为0,第二个元素的索引为1,依此类推。序列的元素可以通过索引进行访问,一般格式为:序列名[索引]例如:>>>greeting="hello">>>greeting[0]'H'除了常见的正向索引,Python序列还支持反向索引,即负数索引,可以从最后一个元素开始计数,最后一个元素的索引是-1,倒数第二个元素的索引是-2,依此类推。使用负数索引,可以在无需计算序列长度的前提下很方便地定位序列中的元素。例如:>>>greeting[-1]'o'2.序列的分片分片(slice)就是取出序列中某一范围内的元素,从而得到一个新的序列。序列分片的一般格式为:序列名[起始索引:终止索引:步长]其中,起始索引是提取部分的第一个元素的编号,终止索引对应的元素不包含在分片范围内。步长为非零整数,当步长为负数时,从右到左提取元素。当忽略参数时,起始元素默认为第一个,终止索引默认为最后一个,步长默认为1。例如:>>>number=[1,2,3,4,5,6,7,8,9,10]>>>number[3:6][4,5,6]>>>number[0:1][1]

注意:分片操作是产生新的序列,不会改变原来的序列。例如:>>>x=['a','b','c','d']>>>y=x[:]>>>id(x),id(y)(35812056,35833816)x[:]将产生一个新的列表,所以x和y代表不同的对象。而语句y=x则是给x的内容再取一个名字y,也就是x和y都指向相同的存储内容,并没有实现存储内容的真正的复制。看下面的语句。>>>x=['a','b','c','d']>>>y=x>>>id(x),id(y)(35812736,35812736)6.1.2序列的计算1.序列相加通过使用加号可以进行序列的连接操作。例如:>>>[1,2,3]+[4,5,6][1,2,3,4,5,6]注意,只有两种相同类型的序列才能进行连接操作。2.序列相乘用整数n乘以一个序列会生成新的序列,在新序列中,原来的序列将重复n次。当n<1时,将返回空列表。例如:>>>(42,)*5(42,42,42,42,42)>>>2*[1,2,3,4,5][1,2,3,4,5,1,2,3,4,5]3.序列比较两个序列对象可以进行比较操作,其规则是两个序列的第一个元素先进行比较,如果第1个元素可以得出结果,那么就得出序列比较结果。如果第一个元素一样,则继续比较下一个元素,如果元素本身也是序列,则对元素进行以上过程。例如:>>>(1,2,3)<(1,2,4)True4.成员资格成员资格用于检查一个值是否包含在某个序列中,Python使用in运算符检查元素的成员资格,并返回逻辑型的结果(True或False)。例如:>>>p=(1,2,3,4,5)>>>5inpTrue6.1.3序列处理函数1.len()、max()和min()函数len(s):返回序列中包含元素的个数,即序列长度。min(s):返回序列中最小的元素。max(s):返回序列中最大的元素。2.sum()函数和reduce()函数sum(s):返回序列s中所有元素的和。要求元素必须为数值,否则出现TypeError错误。reduce(f,s[,n]):reduce()函数把序列s的前两个元素作为参数传给函数f,返回计算的结果和序列的下一个元素重新作为f的参数,直到序列的最后一个元素。reduce()函数的返回值是函数f的返回值。在Python3.x中,reduce()函数已经从全局名字空间中移出,放到了functools模块中。如果需要,使用functools.reduce()调用格式。在Python2.x中,reduce是一个全局函数,可直接调用。3.enumerate()和zip()函数enumerate(iter):接收一个可迭代对象作为参数,返回一个enumerate对象,该对象生成由iter每个元素的索引值和元素值组成的元组。zip([s0,s1,……,sn]):接收任意多个序列作为参数,返回一个可迭代对象,其第一个元素是s0,s1,……,sn这些元素的第一个元素组成的一个元组,后面的元素依次类推。若参数的长度不等,则返回列表的长度和参数中长度最短的对象相同。利用*号操作符,可以将对象解压还原。4.sorted()函数和reversed()函数sorted(iterable,key=None,reverse=False):函数返回对可迭代对象iterable中元素进行排序后的列表,函数返回副本,原始输入不变。iterable是可迭代类型;key指定一个接收一个参数的函数,这个函数用于计算比较的键值,默认值为None;reverse代表排序规则,当reverse为True时按降序排序;reverse为False时按升序,默认按升序。reversed(iterable):对可迭代对象iterable的元素按逆序排列,返回一个新的可迭代变量。5.all()和any()函数设s为一个序列,下面的内置函数可用于表、元组和字符串。all(s):如果序列s所有元素都为True,则返回True,否则返回False。any(s):如果序列任一元素为True,则返回True,否则返回False。6.1.4序列拆分赋值使用赋值语句,可以将序列赋给一个变量,也可以将序列拆分,赋给多个变量。例如:>>>x=[1,2,3,4]>>>x[1,2,3,4]>>>a,b,c,d=[1,2,3,4]>>>print(a,b,c,d)1234可以在变量名前面加星号(*),将序列的多个元素值赋给相应的变量。例如:>>>a,*b,c=[1,2,3,4]>>>print(a,b,c)1[2,3]4>>>*a,b,c=[1,2,3,4]>>>print(a,b,c)[1,2]346.2列表的专有操作6.2.1列表的基本操作1.元素赋值使用索引编号来为某个特定的元素赋值,从而可以修改列表。例如:>>>x=[1,1,1]>>>x[1]=10>>>x[1,10,1]2.元素删除从列表中删除元素也很容易,使用del语句来实现。例如:>>>names=['Alice','Beth','Cecil','Jack','Earl']>>>delnames[2]>>>names['Alice','Beth','Jack','Earl']3.分片赋值使用分片赋值可以给列表的多个元素提示赋值。例如:>>>name=list('Perl')>>>name[2:]=list('ar')>>>name['P','e','a','r']4.列表解析在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表中并返回。它的基本形式是一个中括号里面包含一个for语句对一个可迭代对象进行迭代。例如:>>>[iforiinrange(8)][0,1,2,3,4,5,6,7]在列表解析中,可以增加测试语句和嵌套循环。一般形式如下:[表达式for目标1in可迭代对象1[if条件1]……for目标nin可迭代对象n[if条件n]]任意数量嵌套的for循环同时关联可选的if测试,其中if测试语句是可选的,for上下之间表示的是一个嵌套关系。例如:>>>[(x,y)forxinrange(5)ifx%2==0foryinrange(5)ify%2==1][(0,1),(0,3),(2,1),(2,3),(4,1),(4,3)]6.2.2列表的常用方法1.适用于序列的方法s.count(x):返回x在序列s中出现的次数。例如:>>>x=[1,2,1,2,2]>>>x.count(2)3s.index(x):返回x在s中第一次出现的下标。2.只适用于列表的方法s.append(x):在列表s的末尾附加x元素。例如:>>>lst=[1,2,3]>>>lst.append(4)>>>lst[1,2,3,4]s.extend(s1):在列表s的末尾添加列表s1的所有元素。s.sort():对列表s中的元素排序。s.reverse():将列表s中的元素逆序排列。s.pop([i]):删除并返回列表s中指定位置i的元素,默认是最后一个元素.若i超出列表长度,则抛出IndexError异常。s.insert(i,x):在列表s的i位置处插入x,如果i大于列表的长度,则插入到列表最后。s.remove(x):从列表s中删除x,若x不存在,则抛出ValueError异常。6.3元组与列表的比较1.元组与列表的区别(1)元组是不可变的序列类型,元组能对不需要改变的数据进行写保护,使数据更安全。列表是可变的序列类型,可以添加、删除或搜索列表中的元素。(2)元组使用小括号定义用逗号分隔的元素,而列表中的元素应该包括在中括号中。虽然元组使用小括号,但访问元组元素时,要使用中括号按索引或分片来获得对于元素的值。(3)元组可以在字典中当作关键字使用,而列表不能当作字典关键字使用,因为列表不是不可改变的。(4)只要不尝试修改元组,那么大多数情况下把它们当作列表来进行操作。2.元组元素的可变性元组中的数据一旦定义就不允许更改,因此元组没有append()方法、extend()方法或insert()方法,无法向元组中添加元素;元组也没有pop()方法或remove()方法,不能从元组中删除元素;元组也没有sort()方法或reverse()方法,不能修改元组的值。删除元组的元素是不可能的,但可以使用del语句删除整个元组。3.元组与列表的转换元组和列表可以通过list()函数和tuple()函数实现相互转换。list()函数接收一个元组参数,返回一个包含同样元素的列表;tuple()函数接收一个列表参数,返回一个包含同样元素的元组。从实现效果上看,tuple()函数冻结列表,达到保护的目的,而list()函数融化元组,达到修改的目的。6.4序列的应用6.4.1数据排序在Python中,数据排序可以直接使用sort方法或sorted()函数,也可以自己编写排序的程序。

温馨提示

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

评论

0/150

提交评论