(4.3)--第3章 详解Python序列结构Python程序设计基础.ppt

上传人:奉*** 文档编号:96451860 上传时间:2023-11-29 格式:PPT 页数:52 大小:134.15KB
返回 下载 相关 举报
(4.3)--第3章 详解Python序列结构Python程序设计基础.ppt_第1页
第1页 / 共52页
(4.3)--第3章 详解Python序列结构Python程序设计基础.ppt_第2页
第2页 / 共52页
点击查看更多>>
资源描述

《(4.3)--第3章 详解Python序列结构Python程序设计基础.ppt》由会员分享,可在线阅读,更多相关《(4.3)--第3章 详解Python序列结构Python程序设计基础.ppt(52页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第3章 Python序列结构1第3章 Python序列结构2有序序列无序序列列表元组字符串字典集合可变序列不可变序列3.1 列表列表(list)是包含若干元素的有序连续内存空间。当列表增加或删除元素时,列表对象自动进行内存的扩展或收缩,从而保证相邻元素之间没有缝隙。在非尾部位置插入和删除元素时会改变该位置后面的元素在列表中的索引,这对于某些操作可能会导致意外的错误结果。除非确实有必要,否则应尽量从列表尾部进行元素的追加与删除操作。33.1 列表在形式上,列表的所有元素放在一对方括号中,相邻元素之间使用逗号分隔。在Python中,同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数、字

2、符串等基本类型的元素,也可以包含列表、元组、字典、集合、函数以及其他任意对象。10,20,30,40crunchy frog,ram bladder,lark vomitspam,2.0,5,10,20file1,200,7,file2,260,93,5:6,(1,2,3)43.1.1 列表创建与删除使用“=”直接将一个列表赋值给变量即可创建列表对象。a_list=a,b,mpilgrim,z,example a_list=#创建空列表53.1.1 列表创建与删除也可以使用list()函数把元组、range对象、字符串、字典、集合或其他可迭代对象转换为列表。list(3,5,7,9,11)#将

3、元组转换为列表3,5,7,9,11 list(range(1,10,2)#将range对象转换为列表1,3,5,7,9 list(hello world)#将字符串转换为列表h,e,l,l,o,w,o,r,l,d list(3,7,5)#将集合转换为列表3,5,7 x=list()#创建空列表63.1.1 列表创建与删除当一个列表不再使用时,可以使用del命令将其删除。x=1,2,3 del x#删除列表对象 x#对象删除后无法再访问,抛出异常NameError:name x is not defined73.1.2 列表元素访问创建列表之后,可以使用整数作为下标来访问其中的元素,其中0表示第

4、1个元素,1表示第2个元素,2表示第3个元素,以此类推;列表还支持使用负整数作为下标,其中-1表示最后1个元素,-2表示倒数第2个元素,-3表示倒数第3个元素,以此类推。x=P,y,t,h,o,n x0#下标为0的元素,第一个元素P x-1#下标为-1的元素,最后一个元素n83.1.3 列表常用方法9方法方法说明说明append(x)将x追加至列表尾部insert(index,x)在列表index位置处插入x,该位置后面的所有元素后移并且在列表中的索引加1,如果index为正数且大于列表长度则在列表尾部追加x,如果index为负数且小于列表长度的相反数则在列表头部插入元素xremove(x)在

5、列表中删除第一个值为x的元素,该元素之后所有元素前移并且索引减1,如果列表中不存在x则抛出异常pop(index)删除并返回列表中下标为index的元素,如果不指定index则默认为-1,弹出最后一个元素;如果弹出中间位置的元素则后面的元素索引减1;如果index不是-L,L区间上的整数则抛出异常index(x)返回列表中第一个值为x的元素的索引,若不存在值为x的元素则抛出异常count(x)返回x在列表中的出现次数reverse()对列表所有元素进行原地逆序,首尾交换sort(key=None,reverse=False)对列表中的元素进行原地排序,key用来指定排序规则,reverse为F

6、alse表示升序,True表示降序3.1.3 列表常用方法(1)append()、insert()、extend()append()用于向列表尾部追加一个元素;insert()用于向列表任意指定位置插入一个元素;extend()用于将另一个列表中的所有元素追加至当前列表的尾部。x=1,2,3 x.append(4)#在尾部追加元素 x.insert(0,0)#在指定位置插入元素 x.extend(5,6,7)#在尾部追加多个元素 x0,1,2,3,4,5,6,7103.1.3 列表常用方法(2)pop()、remove()pop()用于删除并返回指定位置(默认是最后一个)上的元素;remove

7、()用于删除列表中第一个值与指定值相等的元素;还可以使用del命令删除列表中指定位置的元素。x=1,2,3,4,5,6,7 x.pop()#弹出并返回尾部元素7 x.pop(0)#弹出并返回指定位置的元素1 x=1,2,1,1,2 x.remove(2)#删除首个值为2的元素 del x3#删除指定位置上的元素 x1,1,1113.1.3 列表常用方法(3)count()、index()count()用于返回列表中指定元素出现的次数;index()用于返回指定元素在列表中首次出现的位置。x=1,2,2,3,3,3,4,4,4,4 x.count(3)#元素3在列表x中的出现次数3 x.coun

8、t(5)#不存在,返回00 x.index(2)#元素2在列表x中首次出现的索引1123.1.3 列表常用方法(4)sort()、reverse()列表对象的sort()方法用于按照指定的规则对所有元素进行排序;reverse()方法用于将列表所有元素逆序或翻转。x=list(range(11)#包含11个整数的列表 import random random.shuffle(x)#把列表x中的元素随机乱序 x6,0,1,7,4,3,2,8,5,10,9 x.sort(key=str)#按转换为字符串后的大小,升序排序 x0,1,10,2,3,4,5,6,7,8,9133.1.4 列表对象支持的

9、运算符加法运算符+也可以实现列表增加元素的目的,但返回新列表,涉及大量元素的复制,效率非常低。x=1,2,3 x=x+4#连接两个列表 x1,2,3,4143.1.4 列表对象支持的运算符乘法运算符*可以用于列表和整数相乘,表示序列重复,返回新列表。x=1,2,3,4 x=x*2#元素重复,返回新列表 x1,2,3,4,1,2,3,4153.1.4 列表对象支持的运算符成员测试运算符in可用于测试列表中是否包含某个元素,查询时间随着列表长度的增加而线性增加。3 in 1,2,3True 3 in 1,2,3False163.1.5 内置函数对列表的操作max()、min()函数用于返回列表中所

10、有元素的最大值和最小值,sum()函数用于返回列表中所有元素之和;len()函数用于返回列表中元素个数;zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的zip对象;enumerate()函数返回包含若干下标和值的迭代对象;map()函数把函数映射到列表上的每个元素;filter()函数根据指定函数的返回值对列表元素进行过滤;all()函数用来测试列表中是否所有元素都等价于True;any()用来测试列表中是否有等价于True的元素。173.1.6 列表推导式语法与应用案例列表推导式在逻辑上等价于一个循环语句,只是形式上更加简洁。例如:aList=x*x for x in r

11、ange(10)相当于 aList=for x in range(10):aList.append(x*x)183.1.6 列表推导式语法与应用案例阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64个格子都放满。需要多少粒米呢?sum(2*i for i in range(64)18446744073709551615193.1.6 列表推导式语法与应用案例(1)实现嵌套列表

12、的平铺 vec=1,2,3,4,5,6,7,8,9 num for elem in vec for num in elem1,2,3,4,5,6,7,8,9 在这个列表推导式中有2个循环,其中第一个循环可以看作是外循环,执行的慢;而第二个循环可以看作是内循环,执行的快。上面代码的执行过程等价于下面的写法:vec=1,2,3,4,5,6,7,8,9 result=for elem in vec:for num in elem:result.append(num)result1,2,3,4,5,6,7,8,9203.1.6 列表推导式语法与应用案例(2)过滤不符合条件的元素列出当前文件夹下所有Py

13、thon源文件:import os filename for filename in os.listdir(.)if filename.endswith(.py,.pyw)从列表中选择符合条件的元素组成新的列表:aList=-1,-4,6,7.5,-2.3,9,-11 i for i in aList if i0#所有大于0的数字6,7.5,9213.1.7 切片操作的强大功能在形式上,切片使用2个冒号分隔的3个数字来完成。start:end:step第一个数字start表示切片开始位置,默认为0;第二个数字end表示切片截止(但不包含)位置(默认为列表长度);第三个数字step表示切片的步长

14、(默认为1)。当start为0时可以省略,当end为列表长度时可以省略,当step为1时可以省略,省略步长时还可以同时省略最后一个冒号。当step为负整数时,表示反向切片,这时start应该在end的右侧才行。223.1.7 切片操作的强大功能(1)使用切片获取列表部分元素使用切片可以返回列表中部分元素组成的新列表。与使用索引作为下标访问列表元素的方法不同,切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。233.1.7 切片操作的强大功能 aList=3,4,5,6,7,9,11,13,15,17 aList:#返回包含原列表中所有元素的新

15、列表3,4,5,6,7,9,11,13,15,17 aList:-1#返回包含原列表中所有元素的逆序列表17,15,13,11,9,7,6,5,4,3 aList1:2#隔一个取一个,获取奇数位置的元素4,6,9,13,17 aList3:6#指定切片的开始和结束位置6,7,9 aList0:100#切片结束位置大于列表长度时,从列表尾部截断3,4,5,6,7,9,11,13,15,17 aList100#抛出异常,不允许越界访问IndexError:list index out of range243.1.7 切片操作的强大功能(2)使用切片为列表增加元素 aList=3,5,7 aList

16、len(aList):aListlen(aList):=9#在列表尾部增加元素 aList:0=1,2#在列表头部插入多个元素 aList3:3=4#在列表中间位置插入元素 aList1,2,3,4,5,7,9253.1.7 切片操作的强大功能(3)使用切片替换和修改列表中的元素 aList=3,5,7,9 aList:3=1,2,3#替换列表元素,等号两边的列表长度相等 aList1,2,3,9 aList3:=4,5,6#切片连续,等号两边的列表长度可以不相等 aList1,2,3,4,5,6 aList:2=0*3#隔一个修改一个,切片不连续,两侧长度必须相等 aList0,2,0,4,

17、0,6263.1.7 切片操作的强大功能(4)使用切片删除列表中的元素 aList=3,5,7,9 aList:3=#删除列表中前3个元素 aList9273.2 元组:轻量级列表从形式上,元组的所有元素放在一对圆括号中,元素之间使用逗号分隔,如果元组中只有一个元素则必须在最后增加一个逗号。283.2.1 元组创建与元素访问 x=(1,2,3)#直接把元组赋值给一个变量 x0#元组支持使用下标访问特定位置的元素1 x-1#最后一个元素,元组也支持双向索引3 x1=4#元组是不可变的TypeError:tuple object does not support item assignment x

18、=(3,)#如果元组中只有一个元素,必须在后面多写一个逗号 x(3,)tuple(range(5)#将其他迭代对象转换为元组(0,1,2,3,4)293.2.2 元组与列表的异同点列表和元组都属于有序序列,都支持使用双向索引访问其中的元素,以及使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引,len()、map()、filter()等大量内置函数和+、in等运算符也都可以作用于列表和元组。303.2.2 元组与列表的异同点元组属于不可变(immutable)序列,不可以直接修改元组中元素的值,也无法为元组增加或删除元素。元组没有提供append()、exten

19、d()和insert()等方法,无法向元组中添加元素;同样,元组也没有remove()和pop()方法,也不支持对元组元素进行del操作,不能从元组中删除元素。元组也支持切片操作,但是只能通过切片来访问元组中的元素,而不允许使用切片来修改元组中元素的值,也不支持使用切片操作来为元组增加或删除元素。Python的内部实现对元组做了大量优化,访问速度比列表更快。元组在内部实现上不允许修改其元素值,从而使得代码更加安全。313.2.3 生成器推导式生成器推导式(generator expression)的用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parentheses)作为定界符。生

20、成器推导式的结果是一个生成器对象。生成器对象类似于迭代器对象,具有惰性求值的特点,只在需要时生成新元素,比列表推导式具有更高的效率,空间占用非常少,尤其适合大数据处理的场合。323.2.3 生成器推导式使用生成器对象的元素时,可以根据需要将其转化为列表或元组,也可以使用生成器对象的_next_()方法或者内置函数next()进行遍历,或者直接使用for循环来遍历其中的元素。但是不管用哪种方法访问其元素,只能从前往后正向访问每个元素,没有任何方法可以再次访问已访问过的元素,也不支持使用下标访问其中的元素。333.2.3 生成器推导式使用生成器对象_next_()方法或内置函数next()进行遍历

21、 g=(i+2)*2 for i in range(10)#创建生成器对象 ggenerator object at 0 x0000000003095200 tuple(g)#将生成器对象转换为元组(4,9,16,25,36,49,64,81,100,121)list(g)#生成器对象已遍历结束,没有元素了 g=(i+2)*2 for i in range(10)#重新创建生成器对象 g._next_()#使用生成器对象的_next_()方法获取元素4 g._next_()#获取下一个元素9 next(g)#使用函数next()获取生成器对象中的元素16343.2.3 生成器推导式使用for循

22、环直接迭代生成器对象中的元素 g=(i+2)*2 for i in range(10)for item in g:#使用循环直接遍历生成器对象中的元素 print(item,end=)4 9 16 25 36 49 64 81 100 121 353.3 字典:反映对应关系的映射类型字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含用冒号分隔开的“键”和“值”两部分,表示一种映射或对应关系,也称关联数组。定义字典时,每个元素的“键”和“值”之间用冒号分隔,不同元素之间用逗号分隔,所有的元素放在一对大括号“”中。字典中元素的“键”可以是Python中任意不可

23、变数据,例如整数、实数、复数、字符串、元组等类型等可哈希数据。另外,字典中的“键”不允许重复,而“值”是可以重复的。363.3.1 字典创建与删除使用赋值运算符“=”将一个字典赋值给一个变量即可创建一个字典变量。aDict=server:db.diveintopython3.org,database:mysql也可以使用内置类dict以不同形式创建字典。x=dict()#空字典 x=#空字典 keys=a,b,c,d values=1,2,3,4 dictionary=dict(zip(keys,values)#根据已有数据创建字典 d=dict(name=Dong,age=39)#以关键参数

24、的形式创建字典373.3.2 字典元素的访问字典中的每个元素表示一种映射关系或对应关系,根据提供的“键”作为下标就可以访问对应的“值”,如果字典中不存在这个“键”会抛出异常。aDict=age:39,score:98,97,name:Dong,sex:male aDictage#指定的“键”存在,返回对应的“值”39 aDictaddress#指定的“键”不存在,抛出异常KeyError:address383.3.2 字典元素的访问字典对象提供了一个get()方法用来返回指定“键”对应的“值”,并且允许指定该键不存在时返回特定的“值”。例如:aDict.get(age)#如果字典中存在该“键”

25、则返回对应的“值”39 aDict.get(address,Not Exists.)#指定的“键”不存在时返回指定的默认值Not Exists.使用字典对象的items()方法可以返回字典的键、值对。使用字典对象的keys()方法可以返回字典的键。使用字典对象的values()方法可以返回字典的值。393.3.2 字典元素的访问问题解决:问题解决:首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。import string import random x=string.ascii_letters+string.digits+string.punctuation y=rando

26、m.choice(x)for i in range(1000)z=.join(y)d=dict()#使用字典保存每个字符出现次数 for ch in z:dch=d.get(ch,0)+1403.3.3 元素添加、修改与删除当以指定“键”为下标为字典元素赋值时,有两种含义:1)若该“键”存在,则表示修改该“键”对应的值;2)若不存在,则表示添加一个新的“键:值”对,也就是添加一个新元素。aDict=age:35,name:Dong,sex:male aDictage=39#修改元素值 aDictage:39,name:Dong,sex:male aDictaddress=SDIBT#添加新元素

27、 aDictage:39,address:SDIBT,name:Dong,sex:male413.3.3 元素添加、修改与删除如果需要删除字典中指定的元素,可以使用del命令。del aDictage#删除字典元素 aDictscore:98,97,sex:male,a:97,name:Dong423.4 集合集合(set)属于Python无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复。集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。433.4.1 集合对象的创建

28、与删除直接将集合赋值给变量即可创建一个集合对象。a=3,5#创建集合也可以使用函数set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个。b_set=set(0,1,2,3,0,1,2,3,7,8)#转换时自动去掉重复元素 b_set0,1,2,3,7,8 x=set()#空集合443.4.2 集合操作与运算(1)集合元素增加与删除使用集合对象的add()方法可以增加新元素,如果该元素已存在则忽略该操作。s=1,2,3 s.add(3)#添加元素,重复元素自动忽略 s1,2,3453.4.2 集合操作与运算po

29、p()方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;remove()方法用于删除集合中的元素,如果指定元素不存在则抛出异常;discard()用于从集合中删除一个特定元素,如果元素不在集合中则忽略该操作;s.discard(5)#删除元素,不存在则忽略该操作 s1,2,3,4 s.remove(5)#删除元素,不存在就抛出异常KeyError:5 s.pop()#删除并返回一个元素1463.4.2 集合操作与运算(2)集合运算 a_set=set(8,9,10,11,12,13)b_set=0,1,2,3,7,8 a_set|b_set#并集0,1,2,3,7,8,9,10,11,12,13 a_set&b_set#交集8 a_set-b_set9,10,11,12,13473.4.2 集合操作与运算 x=1,2,3 y=1,2,5 z=1,2,3,4 x x y 1,2,3 x,y,z=1,2,3#多个变量同时赋值 x,y=y,x#交换两个变量的值 x,y,z=range(3)#可以对range对象进行序列解包 x,y,z=map(str,range(3)#使用可迭代的map对象进行序列解包52

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com