python从入门到精通全60集课件第六章数据结构_第1页
python从入门到精通全60集课件第六章数据结构_第2页
python从入门到精通全60集课件第六章数据结构_第3页
python从入门到精通全60集课件第六章数据结构_第4页
python从入门到精通全60集课件第六章数据结构_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

Python语言编程导论2021/7/171第六章数据结构张晋连

2016.10主要内容2021/7/172概述序列通用操作字符串列表元组字典集合一、概述Python提供了功能强大的内置数据结构。包括:–字符串列表元组字典集合序列2021/7/173二、序列通用操作2021/7/174Python中,字符串、列表和元组都属于序列。序列有一些通用的操作。包括:索引(indexing)、切片(slicing)、加(adding)、乘(multiplying)、检查某个元素是否属于序列的成员(成员资格)、计算序列长度、找出最大元素和最小元素等。序列相关操作标准类型运算符值比较对象身份比较布尔运算序列类型运算符获取重复连接判断内建函数序列类型转换工厂函数序列类型可用内建函数2021/7/175标准类型运算符2021/7/176标准类型运算符示例2021/7/177序列类型运算符2021/7/178序列的索引序列中的所有元素都有编号。从0开始递增。这些元素可以通过编号分别访问。索引有正索引和负索引,可根据实际情况选用。例如:字符串’apple’的正索引和负索引2021/7/179序列类型运算符示例2021/7/1710序列类型转换工厂函数list()str()tuple()2021/7/1711序列类型可用内建函数说明:在循环中引用相关函数,可以高效地得出相应结果。2021/7/1712例:同时获取序列索引及值例:同时循环两个或多个序列2021/7/1713例:逆向循环序列例:按排序后的顺序循环序列2021/7/1714三、字符串2021/7/1715在Python中,字符串是除数字外最重要的数据类型。字符串无处不在:将字符串输出到屏幕上;从用户的键盘输入读取字符串;文件通常被视为大型字符串;网页大部分是由文本组成的。可充分利用索引和切片—用于从字符串中提取子串。虽然Python字符串提供了众多实用的函数,但实际处理字符串时,常常需要更强大的工具。Python提供了一种用于复杂字符串处理的微型语言—正则表达式,但正则表达式并不是Python的一部分。例6-1:温度转换程序2021/7/1716例6-2:输入一个月份数字,返回对应月份名称缩写2021/7/17171、字符串格式化2021/7/1718C语言使用函数printf()格式化输出结果,

Python也提供了类似功能。Python将若干值插入带有“%”标记的字符串中,从而可以按照指定格式输出字符串。语法:"%s"

%

str1"%s

%s"

%

(str1,

str2)例6-3:格式化字符串执行结果:2021/7/1719例6-4:带精度的格式化执行结果:2021/7/1720Python格式化字符串的替代符及含义:2021/7/1721符号描述符号描述%c格式化字符及其ASCII码%f格式化浮点数字,可指定小数点后的精度%s格式化字符串%e用科学计数法格式化浮点数%d格式化整数%E作用同%e%u格式化无符号整数%g根据值的大小决定使用%f或%e%o格式化无符号八进制数%G作用同%g%x格式化无符号十六进制数%p用十六进制数格式化变量的地址%X格式化无符号十六进制数(大写)%%若在字符串中输出“%”,需要使用“%%”例6-5:符号、对齐和用0填充在字段宽度和精度之间还可以放置一个“标志”,该标志可以是零、加号、减号或空格。零表示数字将会用0填充。执行结果:2021/7/17222、字符串的转义字符2021/7/1723计算机中存在可见字符与不可见字符。可见字符指键盘上的字母、数字和符号。不可见字符是指换行、回车、制表符等字符。对于不可见字符,Python使用的方法类似于C语言,都是使用“\”作为转义字符。Python还提供了函数strip()、lstrip()、rstrip()去除字符串中的转义字符。Python常用的转义字符及其含义2021/7/1724符号描述符号描述\\反斜线\v纵向制表符\’单引号\r回车符\”双引号\f换页符\a发出系统响铃声\o八进制数代表的字符\b退格符\x十六进制数代表的字符\n换行符\000终止符,其后的字符串全部忽略\t横向制表符例6-6:转义字符应用2021/7/17执行结果:253、字符串的常用方法2021/7/1726Python字符串自带了大量很有用的方法(字符串类内定义的函数),可调用dir并将参数指定为任何字符串(如:dir(‘’))来查看它们。虽无必要准确记住所有字符串方法功能,但最好有个大致了解,这样有益于需要时去查询具体使用。字符串方法的详细介绍可参阅其文档字符串或Python在线文档(

)。此处介绍常用的字符串方法。字符串常用方法2021/7/1727(1)字符串测试2021/7/1728方法名何时返回True方法名何时返回Trues.endswith(t)s以字符串t结尾s.islower()s只包含小写字母s.startswith(t)s以字符串t打头s.isnumeric()s只包含数字s.isalnum()s只包含字母和数字s.isprintable()s只包含可打印字符s.isalpha()s只包含字母s.isspace()s只包含空白字符s.isdecimal()s只包含表示十进制数字的字符s.istitle()s是个大小写符合标题要求的字符串s.isdigit()s只包含数字字符s.isupper()s只包含大写字母s.isidentifier()s是合法的标识符t

in

ss包含字符串t用于检测字符串是否为特定格式,它们组成了一个最大的字符串方法组。测试方法的值都返回True或False。例如:2021/7/1729(2)字符串的查找2021/7/1730方法名返回值s.find(t)若未找到字符串t,则返回-1;否则返回t在s中的起始位置s.rfind(t)与find相同,但从右往左查找s.index(t)与find相同,但如果在s中找不到t,则引发ValueError异常s.rindex(t)与index相同,但从右往左查找说明:方法index和find之间的差别在于没有找到指定子串的情形。方法index引发异常ValueError,而方法find将返回-1。例6-7:查找方法应用2021/7/1731(3)字符串的替换2021/7/1732方法名返回的字符串s.replace(old,new)将s中的每个old替换为news.expandtabs(n)将s中的每个制表符扩展为空格,空格宽度为nPython字符串自带了两个替换方法,如下表所示。注意:使用替换方法可轻松地删除字符串中的子串。例6-8:字符串替换2021/7/1733(4)字符串拆分2021/7/1734方法名返回的字符串s.partition(t)将s拆分为三个字符串(head、t和tail),其中

head为t前面的子串,tail为t后面的子串。返回值为元组s.rpartition(t)与partition相同,但从s的右端开始搜索t。返回值为元组s.split(t)以t为分隔符,将s划分成一系列子串,并返回一个由这些子串组成的列表s.rsplit(t)与split相同,但从s的右端开始搜索ts.splitlines()返回一个由s中的各行组成的列表拆分方法将字符串拆分成多个子串。如下表所示。例6-9:拆分字符串执行结果:2021/7/1735例6-10:使用split()方法获取子串执行结果:2021/7/1736(5)改变大小写2021/7/1737方法名返回的字符串s.capitalize()将s[0]改为大写,其余小写s.lower()让s的所有字母都小写s.upper()让s的所有字母都大写s.swapcase()将小写字母改为大写,并将大写字母改为小写s.title()让s的大小写符合标题的要求说明:在以上函数中,Python都创建并返回一个新字符串,Python不会真正修改原字符串。例如:2021/7/1738例6-11:如从网络上下载的类似如下形式的一些句子:Whatdo

you

think

of

thissaying"No

pain,No

gain"?对于句子中双引号中的内容,首先判断其是否满足标题格式,不管满足与否最终都将其转换为标题格式输出。2021/7/17392021/7/1740(6)设置字符串格式2021/7/1741方法名返回的字符串s.center(n,ch)包含n个字符的字符串,其中s位于中间,两边用字符ch填充s.ljust(n,ch)包含n个字符的字符串,其中s位于左边,右边用字符ch填充s.rjust(n,ch)包含n个字符的字符串,其中s位于右边,左边边用字符ch填充s.format(vars)包含用于设置字符串格式的微型语言,详见:

/3.4/library/string.html#formatspec例6-12:设置格式执行结果:2021/7/1742(7)字符串剥除2021/7/1743方法名返回的字符串s.strip(ch)从s开头和末尾删除所有包含在字符串ch中的字符s.lstrip(ch)从s开头(左端)删除所有包含在字符串ch中的字符s.rstrip(ch)从s末尾(右端)删除所有包含在字符串ch中的字符剥除方法用于删除字符串开头或末尾多余的字符。如下表所示。默认情况下,剥除空白字符;如果指定了字符串参数,则剥除该字符串中的字符(空白字符包括:空格本身、回车\r、回车换行\n、制表符\t、换页符\f)。例6-13:字符串剥除2021/7/1744例6-14:去除转义字符2021/7/1745(8)字符串比较2021/7/1746Python直接使用“==”“!=”操作符比较两个字符串的内容。若要比较字符串的部分内容,可以先截取子串,再使用“==”“!=”操作符进行比较。若要比较字符串的开头和结尾部分,更方便的方式是使用startswith()或endswith()函数。startswith()与endswith()的声明为:startswith(substring,

[start

[,end]])endswith(substring,

[start

[,end]])例6-15:比较字符串开始和结束处执行结果:2021/7/1747(9)字符串的合并之前介绍过,Python可使用“+”连接不同的字符串。除此之外,还可以使用join方法(是split方法的逆方法)和reduce函数实现字符串的合并。说明:reduce是functools模块中的函数。2021/7/1748例6-16:使用join函数连接字符串执行结果:2021/7/1749例6-17:使用reduce函数连接字符串执行结果:2021/7/17505、字符串与日期的转换在实际应用中,经常需要将日期类型与字符串类型互相转换。Python提供了time模块处理日期和时间。函数strftime()可以实现从时间到字符串的转换。字符串到时间的转换要进行两次转换,需要使用time模块和datetime类。2021/7/1751strftime()函数:2021/7/1752声明:strftime(format[,

tuple])->string说明:参数format表示格式化日期的特殊字符。例如:

“%Y-%m-%d”相当于“yyyy-mm-dd”.参数tuple表示需要转换的时间,用元组存储。元组中的元素分别表示年、月、日、时、分、秒。函数返回一个表示时间的字符串。字符串到时间的转换步骤:2021/7/1753第一次转换:调用函数strptime()将字符串转换为一个元组。其声明为:strptime(string,

format)->struct_time函数返回一个存放时间的元组。第二次转换:将表示年、月、日的3个变量传递给函数datetime()。datetime类的

datetime()函数格式为:datetime(year,

month,

day[,

hour[,

minute[,second[,

microsecond[,tzinfo]]]])函数返回一个date类型的变量。格式化日期的常用标记2021/7/1754符号描述符号描述%a英文星期的简写%M分钟数,取值在01~59之间%A英文星期的完整拼写%j显示从本年第1天开始到当天的天数%b英文月份的简写%w显示今天是星期几,0表示星期天%B英文月份的完整拼写%W显示当天属于本年的第几周,以星期一作为一周的第一条进行计算%c显示本地的日期和时间%x本地的当天日期%d日期数,取值在1~31之间%X本地的当天时间%H小时数,取值在00~23之间%y年份,取值在00~99之间%I小时数,取值在01~12之间%Y年份的完整数字%m月份,取值在01~12之间例6-18:时间与字符串的互相转换执行结果:2021/7/1755课堂练习一:课堂练习一2021/7/1756四、列表2021/7/1757列表是Python中非常重要的数据类型,通常作为函数的返回类型。列表由一组元素组成。列表可包含任何类型的值:数字、字符串甚至序列。列表是可变的,即可以在不复制的情况下添加、删除或修改列表元素。1、列表的创建2021/7/1758格式:list=[元素1,元素2,…元素n] #定义n个元素组成的列表list=[] #定义空列表list=[x]#定义只包含一个元素的列表说明:列表用方括号括起,其中元素用逗号分隔。列表的形式2021/7/1759例6-19:创建列表2021/7/17602、列表的使用列表也是序列,其使用与字符串十分相似,同样支持负数索引、分片等特性,但列表的元素可修改。与字符串一样,可使用len获取列表长度,还可使用+和*拼接列表。2021/7/1761例6-20:列表的使用2021/7/17623、常用列表方法2021/7/1763方法返回值s.append(x)在列表s末尾处添加元素xs.count(x)返回元素x在列表中出现的次数s.extend(lst)将lst的所有元素都添加到列表s末尾s.index(x)返回第一个x元素的索引s.insert(i,x)将元素x插入到索引i指定的元素前面,结果是s[i]=xs.pop(x)删除并返回s中索引为i的元素s.remove(x)删除s中的第一个x元素s.reverse(x)反转s中元素的排列顺序s.sort()将s的元素按升序排列说明:所有适用于序列的函数均适用于列表。例6-21:在列表末尾添加元素或列表执行结果:2021/7/1764例6-22:列表的查找、排序和反转执行结果:2021/7/1765例6-23:用列表实现堆栈(“后进先出”的线性表)执行结果:2021/7/1766例6-24:用列表实现队列执行结果:2021/7/1767例6-25:列表应用某学校组织了一场校园歌手比赛,每个歌手的得分由10名评委和观众决定,最终得分的规则是去掉10名评委所打分数的一个最高分和一个最低分,再加上所有观众评委分数后的平均值。评委打出的10个分数为:9、9、8.5、10、7、8、8、9、8和10,观众评委打出的综合评分为9,请计算该歌手的最终得分。2021/7/1768C++源程序:2021/7/17692021/7/1770课堂练习二:2021/7/1771课堂练习二4、列表解析列表的用途如此之多,以至于Python提供了一种用于创建列表的特殊方法—列表解析。列表解析的特点为:动态创建列表简单灵活有用[

expression

for

expr

in

sequence1for

expr2

in

sequence2

...for

exprN

in

sequenceNif

condition

]2021/7/1772例如:2021/7/1773例6-26:用普通方法和列表解析方法分别创建一个由1~10的平方组成的列表执行结果:2021/7/1774例6-27:将列表中的每个数字翻倍并加上7执行结果:2021/7/1775例6-28:在列表解析中使用字符串执行结果:2021/7/1776例6-29:利用列表解析修改现有列表执行结果:2021/7/1777例6-30:返回列表中的正数(利用列表解析进行筛选)执行结果:2021/7/1778例6-31:利用列表解析删除字符串中的所有元音执行结果:2021/7/17795、函数作为列表的元素用函数作为参数与列表一起使用非常有用,也称为高阶编程。例6-32:假定L是一个列表,f是一个函数,用函数替换每个元素改变列表,即用f(e)改变L中的元素e。2021/7/1780执行结果:2021/7/1781课堂练习三:课堂练习三2021/7/1782五、元组2021/7/1783元组是一种不可变序列,即创建之后不能再做任何修改。元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组。元组通常代表一行数据,而元组中的元素代表不同的数据项。1、元组的创建2021/7/1784格式:tuple=(元素1,元素2,…元素n) #定义n个元素组成的元组tuple=() #定义空元组

tuple=(元素1,)#定义单元素元组说明:元组用圆括号括起(也可以不加圆括号),其中元素用逗号分隔。2021/7/17852021/7/17862021/7/17872、元组常用方法2021/7/1788方法名返回值tupple.count(x)元素x在元组tupple中出现的次数tupple.index(x)元组tupple中第一个元素x的索引,若

x未包含在元组tupple中,将引发

ValueError异常说明:所有适用于序列的函数均适用于元组。例6-33:元组方法应用2021/7/1789执行结果:2021/7/17903、元组用途在映射类型中当作键使用函数的特殊类型参数作为很多内建函数的返回值2021/7/1791课堂练习四:课堂练习四2021/7/1792六、字典2021/7/1793字典是Python重要的数据类型,字典是由“键—值”对组成的集合,字典中的“值”通过“键”来引用。字典也称为关联数组、映射或散列表。Python字典利用了“散列”方法,使用专门的散列函数完成,即字典中的每个键都被转换为一个数字—散列值。字典中值存储在一个底层列表中,并用散列值作为索引。访问值时,将提供的键转为散列值,再跳到列表的相应位置。使用“键”来访问字典值效率极高。另外与列表一样,字典也是可以改变的:可以添加、删除或修改“键—值”对。1、创建字典2021/7/1794格式:dictionary={key1:value1,key2:value2,…,keyn:valuen)}#创建n个“键—值”对组成的字典dictionar={} #创建空字典注意,对于字典的键有两个限制:字典中的键必须独一无二,即在同一个字典中,任何两个键—值对都不能相同;键必须是不可变的。因此,字典键不能是列表、字典对值没有这两个限制。2、字典的访问2021/7/1795字典的访问与元组、列表有所不同,元组和列表是通过数字索引获取对应的值,而字典是通过

key值获取相应的value值。格式:value=dict[key]说明:字典的添加、删除和修改只需执行一条赋值语句即可,例如:dict[’x’]=’value’字典没有remove操作。删除字典元素可调用内置函数del()完成。例6-34:字典的创建、添加、删除和修改执行结果:2021/7/17963、字典常用方法方法名返回的值d.items()返回一个由字典d的键—值对(key,value)组成的视图(view)d.keys()返回一个由字典d的键组成的视图d.value()返回一个有字典d的值组成的视图d.get(key)返回与key相关联的值d.pop(key)删除键key并返回与之相关联的值d.popitem()删除字典d中某个键—值对并返回相应的键—值对d.clear()删除字典d的所有元素d.copy()复制字典dd.fromkeys(s,t)创建一个新字典,其中的键来自s,值来自td.setdefault(key,v)如果键key包含在字典d中,则返回其值;否则返回v并将(key,v)添加到字典d中d.update(e)2021/7/17将e中的键—值对添加到字典d中;e可能是字典,也可能是键—值对序列

97说明:popitem()返回并删除字典的某个键—值对,具体是哪个预先并不知道,因此仅当不在乎字典元素的顺序时,此函数才适用。items()、keys()和values()都返回一个特殊对象—视图。视图被链接到原始字典,因此若字典发生变化,视图也将相应地变化。2021/7/1798例6-35:字典函数应用一2021/7/1799执行结果:2021/7/17100例6-36:字典函数应用二2021/7/171014、字典的排序和复制2021/7/17102字典的排序可以使用内置函数sorted()实现。sorted(iterable,key=No

温馨提示

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

评论

0/150

提交评论