Python程序设计现代方法(第2版) 课件 第5章 组合数据类型_第1页
Python程序设计现代方法(第2版) 课件 第5章 组合数据类型_第2页
Python程序设计现代方法(第2版) 课件 第5章 组合数据类型_第3页
Python程序设计现代方法(第2版) 课件 第5章 组合数据类型_第4页
Python程序设计现代方法(第2版) 课件 第5章 组合数据类型_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第5章组合数据类型《Python程序设计现代方法(第2版)》学习目标/Target

了解组合数据类型,能够归纳序列类型、集合类型和映射类型的特点

熟悉切片的基本使用,能够使用切片截取列表或元组的元素

掌握列表的常见操作,能够根据需求选择合适的方法操作列表

掌握列表推导式,能够选择合适的列表推导式构建列表

掌握元组的常见操作,能够通过字面量或tuple()函数创建元组学习目标/Target

掌握集合的常见操作,能够根据需求选择合适的方法操作集合

掌握集合关系测试的方式,能够通过操作符或方法实现集合关系的操作

掌握字典的创建或访问,能够创建字典并根据键访问其对应的值

掌握字典的常见操作,能够根据需求选择合适的方法操作字典章节概述/Summary随着大数据时代的到来,计算机在实际应用中需要批量处理相互联系的复杂数据,例如班级学生的基本信息和各科成绩等。为了有效地处理这些数据,Python提供了组合数据类型。这些数据类型可以同时处理一组数据,简化了开发人员的工作,同时又大大提高了程序的运行效率。本章将全面介绍Python中的组合数据类型。目录/Contents01组合数据类型概述列表与元素实例:垃圾分类0203目录/Contents04集合字典实例:手机通讯录0506组合数据类型概述5.15.1组合数据类型概述1.序列类型序列类型来源于数学概念中的数列。数列是按一定顺序排成一列的一组数,每个数称为这个数列的项,排在第1位的数称为这个数列的第1项,排在第2位的数称为这个数列的第2项,以此类推,排在第n位的数称为这个数列的第n项。存储n项的数列{an}的定义如下:

观察数列可知,数列的索引从0开始。通过索引i可以访问数列中的第i+1项,例如通过索引1可获取数列{an}中的第2项,即a1。5.1组合数据类型概述序列类型在数列的基础上进行了拓展,它能够存储一组排列有序的元素,每个元素的类型可以不同,通过索引可以访问序列中指定位置的元素。序列类型支持双向索引,包括正向索引和逆向索引。1.序列类型5.1组合数据类型概述Python中的序列类型主要有三种,分别是字符串、元组和列表,其中字符串和元组是不可变的序列类型,创建好以后不可以进行任何修改;列表是一个可变的序列类型,使用相对更加灵活。1.序列类型5.1组合数据类型概述数学中的集合是指具有某种特定性质的对象汇总而成的集体,其中构建集合的这些对象称为该集合的元素。集合中的元素具有3个特征,具体如下:确定性:给定一个集合,那么任何一个元素是否在集合中就确定了。例如,地球的四大洋构成一个集合,其内部的元素太平洋、大西洋、印度洋、北冰洋是确定的。互异性:集合中的元素互不相同,即每个元素只能出现一次。无序性:集合中的元素没有顺序,顺序不同但元素相同的集合可视为同一集合。2.集合类型5.1组合数据类型概述Python中的集合类型与数学中的集合概念一致,也具备以上三个特性,它用于存储一组元素,元素必须唯一,但元素可以是无序的。另外,Python要求放入集合中的元素必须是不可变类型,例如整型、浮点型、复数类型、布尔类型、字符串和元组类型,这些都可以作为集合元素出现,列表、字典及集合类型都属于可变类型,这些都不能作为集合元素出现。2.集合类型5.1组合数据类型概述映射类型是一种用于存储元素的数据结构,每个元素都以键值对的形式存储,其中值为实际存储的数据,键为查找数据时使用的关键字。键值对中的键与值之间存在映射关系,我们使用键可以快速地获取其对应的值。3.映射类型5.1组合数据类型概述在数学中,我们把两个非空集合A、B之间通过某种确定的对应法则f关联起来,使集合A中的元素都与集合B中对应的元素相关联,这个对应法则f就被看做是A到B的映射。在映射关系中,每个键与其唯一对应的值之间存在一种单向关联。3.映射类型5.1组合数据类型概述在Python中,字典是一种映射类型的数据结构,字典的键必须遵守以下两个原则:①每个键只能对应一个值,不允许同一个键在字典中重复出现。②字典中的键是不可变类型。3.映射类型列表与元组5.25.2.1切片切片是指对序列类型截取其中一部分的操作。序列[起始索引:结束索引:步长]起始索引和结束索引用于给定切片截取的范围,该范围属于左闭右开的区间,即包含起始索引,不包含结束索引本身;步长的取值可以是正整数和负整数,默认值为1。5.2.1切片1.步长为正整数当切片的步长为正整数时,会按照从左到右的顺序截取元素,每隔“步长-1”个元素进行一次截取。需要注意的是,起始索引应该小于结束索引,否则切片截取的结果为空字符串。words='敏而好学不耻下问'print(words[1:6])#没指定步长,默认值为1print(words[1:6:2])#指定步长为2print(words[6:1:2])#起始索引大于结束索引,指定步长为25.2.1切片当切片的步长为负整数时,会按照从右到左的顺序截取元素,每隔“步长-1”个元素进行一次截取。需要注意的是,起始索引应该大于结束索引,否则切片截取的结果为空字符串。words='敏而好学不耻下问'print(words[6:1:-1])#指定步长为-1print(words[6:1:-2])#指定步长为-2print(words[1:6:-2])#起始索引小于结束索引,指定步长为-22.步长为负整数5.2.2列表列表字面量是比较简单的创建列表的方式,它直接采用中括号的形式包含零个、一个或多个元素,各元素之间使用英文逗号分隔。[]

#创建空列表,列表中没有任何元素[1,10,55,20,6]

#创建列表,每个元素的类型均为整型[10,‘word',True,3.1415]

#创建列表,每个元素的类型均不同1.创建列表5.2.2列表通过list()函数可以根据已有的元组、字符串或其他组合数据类型创建列表。如果没有给该函数传入任何组合数据类型,那么会创建一个空列表。

str_demo='破釜沉舟'print(list(str_demo))

#根据字符串创建列表tuple_demo=(1,3,5,7,9)print(list(tuple_demo))

#根据元组创建列表print(list())

#创建空列表1.创建列表5.2.2列表使用for语句可以循环对列表中的元素进行遍历操作。

list_demo=list('破釜沉舟')forcharinlist_demo:#利用循环遍历列表的全部元素print(char)2.遍历列表5.2.2列表在Python中,可以使用索引或切片访问或修改列表中的元素,还可以直接使用运算符+=将一个列表的元素添加到另一个列表的末尾。使用索引或切片操作列表时,如果不对列表元素进行赋值操作,那么会根据索引或切片访问相应元素的值或者截取部分元素;如果对列表元素进行赋值操作,那么会将相应的元素值修改为新赋的值。3.修改列表元素5.2.2列表nums=[11,22,33]nums[0]=55#通过索引获取索引0对应的元素,并重新给元素赋值print(nums)nums[0:2]=[0,1]#通过切片获取索引0、1对应的元素,并重新给这两个元素赋值print(nums)other_nums=[5,6]nums+=other_nums#通过+=向nums列表中添加other_nums列表的元素print(nums)修改列表元素的示例代码:3.修改列表元素5.2.2列表需要注意的是,当使用另一个列表来对一个列表的多个元素进行修改时,Python并不要求这两个列表的长度相同,但需要遵循“多增少减”的原则。示例如下:nums=[11,22,33]nums[0:2]=[0]#列表[0]的长度小于nums[0:2]截取结果的长度print(nums)nums[0:2]=[10,20,30]#列表[10,20,30]的长度大于nums[0:2]截取结果的长度print(nums)3.修改列表元素5.2.2列表Python针对列表提供了一些函数或方法,以便开发人员能够轻松地操作列表的元素。函数/方法功能说明len(s)计算序列s的长度或元素个数min(s)返回序列s中的最小元素max(s)返回序列s中的最大元素list.append()在列表的末尾添加元素list.extend()在列表中添加另一列表的元素,功能等同于+=list.insert(i)在列表索引为i的元素之前插入元素len(s)计算序列s的长度或元素个数4.其他操作5.2.2列表Python针对列表提供了一些函数或方法,以便开发人员能够轻松地操作列表的元素。函数/方法功能说明list.pop(i)取出并删除列表中索引为i的元素list.remove()删除列表中第一次出现的元素list.reverse()将列表的元素反转list.clear()删除列表中的所有元素list.copy()生成新列表,并复制列表中的所有元素list.sort(key,reverse)将列表中的元素排序。该方法有两个参数,其中参数key用于指定排序的比较方式,默认使用列表的元素进行比较;参数reverse用于指定是否将列表降序排序,默认值为False,表示按照正序方式排列列表的元素4.其他操作5.2.2列表nums=[0,5,10,33,8,19,25,6]nums.append(2)#在列表末尾添加元素2print(nums)nums.insert(2,22)#在列表中索引2元素的前面插入元素22print(nums)nums.remove(33)#删除列表中指定的元素33print(nums)nums.reverse()#将列表的元素反转print(nums)nums.sort()#将列表的元素按从小到大的顺序排序print(nums)nums.clear()#删除列表中的所有元素print(nums)下面通过示例演示一些方法或函数的使用。

4.其他操作5.2.3列表推导式列表推导式是符合Python语法规则的复合表达式,它能以简洁的方式根据已有的列表构建满足特定需求的新列表。列表推导式的基本语法格式如下:[表达式for临时变量in目标对象]例如,通过列表推导式构建新列表,新列表中的元素是其他列表中每个元素值的平方:ls=[1,2,3,4,5,6,7,8]new_ls=[temp*tempfortempinls]#通过列表推导式构建新列表print(new_ls)5.2.3列表推导式1.带if语句的列表推导式在基本列表推导式的for语句之后添加一个if语句,就组成了带if语句的列表推导式,其语法格式如下:[表达式for临时变量in目标对象if判断条件]例如,通过带if语句的列表推导式构建新列表,新列表中只保留列表ls中大于4的元素:new_ls=[tempfortempinlsiftemp>4]print(new_ls)5.2.3列表推导式在基本列表推导式的for语句之前添加一个if-else语句,就组成了带if-else语句的列表推导式,其语法格式如下:[表达式1if判断条件else表达式2for临时变量in目标对象]例如,通过带if-else语句的列表推导式构建新列表,新列表中保留列表ls中值为偶数的元素,以及值为奇数时加1的结果,具体代码如下:new_ls=[tempiftemp%2==0elsetemp+1fortempinls]print(new_ls)2.带if-else语句的列表推导式5.2.3列表推导式在基本列表推导式的for语句之后添加一个for语句,就组成了带for循环嵌套的列表推导式,其语法格式如下:[表达式for临时变量1in目标对象1for临时变量2in目标对象2]例如,取列表ls_one和列表ls_two中元素的和作为列表ls_three的元素,示例代码如下:ls_one=[1,2,3]ls_two=[3,4,5]ls_three=[x+yforxinls_oneforyinls_two]print(ls_three)

3.带for循环嵌套的列表推导式5.2.4元组元组与列表类似,它也是由一组按特定顺序排列的元素组成,元素的个数、类型不受限制,但其存储的元素不能修改。Python中创建元组的方式非常简单,可以直接通过元组字面量创建,元组字面量使用小括号包含零个、一个或多个元素,多个元素之间使用逗号分隔。非空元组的括号可以省略,但空元组的括号不能省略。()#创建空元组(1,)#创建包含一个元素的元组1,#创建包含一个元素的元组,省略括号(1,2,3)#创建包含多个元素的元组1,2,3#创建包含多个元素的元组,省略括号5.2.4元组此外,使用tuple()函数可以根据已有的列表、字符串或其他组合数据类型创建元组。如果没有给tuple()函数传入任何组合数据类型,那么会创建一个空元组,示例如下:str_demo='破釜沉舟'print(tuple(str_demo))#根据字符串创建元组list_demo=[1,3,5,7,9]print(tuple(list_demo))#根据列表创建元组print(tuple())#创建空元组5.2.4元组元组在表达固定数据、多变量同步赋值、循环遍历、函数多返回值等情况下是十分有用的,示例代码如下:x,y=(10,20)#多个变量同步赋值print(x,y)forx,yin((10,20),(11,21),(12,22)):#循环遍历元组print(x,y)实例:垃圾分类5.35.3实例:垃圾分类根据垃圾的属性,垃圾分为可回收物、厨余垃圾、有害垃圾和其他垃圾。垃圾种类名称可回收物废纸、塑料瓶、塑料桶、易拉罐、金属元件、玻璃瓶、废旧衣物、废弃家具、旧数码产品、旧家电厨余垃圾食材废料、菜根菜叶、剩菜、剩饭、蔬菜水果、瓜果皮核、蛋壳、鸡骨、鱼骨、过期食品有害垃圾废电池、废灯管、消毒棉棒、废油漆、过期药品、过期化妆品其他垃圾砖瓦灰土、餐巾纸、保鲜膜5.3实例:垃圾分类假设小明周末聚餐后,产生的垃圾包括废纸、塑料瓶、食材废料、餐巾纸,现要将产生的垃圾分类投入垃圾桶,请编写程序,帮助小明完成垃圾的分类工作。5.3实例:垃圾分类根据前面的描述可知,我们需要对废纸、塑料瓶、食材废料、餐厅纸这几种垃圾进行分类,实现思路具体如下。(1)定义一个变量,用于保存待分类的垃圾名称。因为待分类的垃圾名称有多个,所以此处可以利用列表保存待分类的垃圾名称。(2)定义一个变量,用于保存不同种类的垃圾名称。由于每个种类下有多个垃圾名称,且是固定不变的,所以此处利用4个元组分别保存每个种类下的垃圾名称。(3)判断垃圾名称的种类。这里可以使用for语句遍历待分类垃圾的列表,取出每个垃圾名称,依次使用运算符in判断垃圾名称是否在元组中,若存在,则输出该垃圾的所属分类。集合5.45.4.1集合的常见操作集合是一种用于保存唯一元素的数据类型,其中元素互不相同,且没有顺序。同一集合中的所有元素的类型必须为不可变数据类型,如整数、浮点数、字符串以及元组,而不能是可变数据类型,如列表、字典、集合等。Python中创建集合的方式非常简单,可以直接使用集合字面量创建。集合字面量使用大括号包含一个或多个元素,多个元素之间使用逗号分隔。创建集合的示例如下:set_demo={100,'word',10.5}#创建集合print(set_demo)5.4.1集合的常见操作此外,还可以使用set()函数创建集合,该函数中可以传入任何组合数据类型。如果set()函数没有传入任何组合数据类型,那么会创建一个空元组,例如:str_demo='破釜沉舟'set_one=set(str_demo)#根据字符串创建集合print(set_one)tuple_demo=(13,15,17,19)set_two=set(tuple_demo)#根据元组创建集合print(set_two)set_null=set()#创建空集合print(set_null)需要注意的是,空集合只能通过set()函数创建,不能通过集合字面量的方式创建。5.4.1集合的常见操作集合是可变的数据类型,它里面的元素可以动态地增加或删除。方法功能说明S.add(x)往集合S中添加元素x(x不属于S)S.remove(x)若x在集合S中存在,则删除该元素,若不存在,则会报错S.discard(x)若x在集合S中存在,则删除该元素,若不存在,则不会报错S.pop()随机返回集合S中的一个元素,同时删除该元素。若S为空,则会报错S.clear()清空集合S中的所有元素,使其变成一个空集合S.copy()复制集合SS.isdisjoint(T)检测集合S和T中是否有相同的元素5.4.1集合的常见操作假设有一个集合为{10,151,33,98,57},分别使用add()、remove()、pop()和clear()方法实现集合的添加、删除与清空,示例如下:set_demo={10,151,33,98,57}#创建集合set_demo.add(61)

#向集合中添加元素print(set_demo)set_demo.remove(151)#删除集合中的一个指定元素print(set_demo)set_demo.pop()#随机删除集合中的一个元素print(set_demo)set_demo.clear()#删除集合中的所有元素print(set_demo)5.4.2集合关系测试数学中,两个集合关系的操作主要包括交集、并集、差集、补集。设A、B是两个集合,集合关系的操作介绍如下:交集:属于集合A且属于集合B的元素所组成的集合,记作A∩B。并集:集合A和集合B的元素合并在一起组成的集合,记作A∪B。差集:属于集合A但不属于集合B的元素所组成的集合,叫做A与B的差集;属于集合B但不属于集合A的元素所组成的集合,叫做B与A的差集。补集:属于集合A和集合B但不同时属于两者的元素所组成的集合,记作C∪A。5.4.2集合关系测试Python提供了四种操作符以实现这四种操作,分别是“|”(并集操作符)、“-”(差集操作符)、“&”(交集操作符)、“^”(补集操作符)。5.4.2集合关系测试此外,Python还提供了与增强操作符功能相同的方法。接下来,以集合S和T为例,通过一张表罗列这两个集合之间关系的操作。操作功能说明S|T或S.union(T)返回一个新集合,该集合包含属于S和T的所有元素S-T或S.difference(T)返回一个新集合,该集合包含属于集合S但不属于集合T的元素S&T或S.intersection(T)返回一个新集合,该集合包含同时属于集合S和T的元素S^T或S.symmetric_difference(T)返回一个新集合,该集合包含集合S和T中的元素,但不包含同时属于两者的元素S|=T或S.update(T)更新集合S,该集合包含集合S和T所有的元素5.4.2集合关系测试此外,Python还提供了与增强操作符功能相同的方法。接下来,以集合S和T为例,通过一张表罗列这两个集合之间关系的操作。操作功能说明S|=T或S.update(T)更新集合S,该集合包含集合S和T所有的元素S-=T或S.difference_update(T)更新集合S,该集合包含在集合S中但不属于集合T的元素S&=T或S.intersection_update(T)更新集合S,该集合包含同时属于集合S和T的元素S^=T或S.symmetric_difference_update(T)更新集合S,该集合包含集合S和T中的元素,但不包含同时属于两者的元素5.4.2集合关系测试假设有集合a={1,11,21,31,17}和集合b={0,11,20,17,30},它们执行取交集、并集、差集、补集的操作,示例如下:a={1,11,21,31,17}b={0,11,20,17,30}result_one=a|b#取a和b的并集print(result_one)result_two=a-b#取a和b的差集print(result_two)result_thr=a&b#取a和b的交集print(result_thr)result_fou=a^b#取a和b的补集print(result_fou)5.4.2集合关系测试Python中使用比较运算符可以用来检查某个集合是否为其它集合的子集或者超集,其中,“<”或者“<=”运算符用于判断真子集和子集,“>”和“>=”运算符用于判断的是真超集和超集。set_one=set('what')set_two=set('hat')result=set_one<set_two#判断set_one是否为set_two的严格子集print(result)result=set_one>set_two#判断set_one是否为set_two的严格超集print(result)字典5.55.5.1字典介绍Python中的字典是一种无序、可变的数据类型,用于存储键值对形式的元素。键必须是不可变类型,而值可以是任意类型。字典中的元素是唯一的,如果使用相同的键添加元素,则该键对应的值会覆盖前面的值。Python中可以直接通过字典字面量创建字典,字典字面量使用大括号包含零个、一个或多个键值对,多个键值对之间使用逗号分隔,语法格式如下:{键1:值1,键2:值2,...键N:值N}字典中的键与值之间以冒号分隔,长度没有限制。从语法设计角度来看,集合和字典均使用大括号包含元素,实际上集合与字典也有着相似的性质,即元素都是无序,且不能重复。5.5.1字典介绍通过字面量创建字典,示例如下:{}

#创建空字典{'A':'123','B':'135','C':'680‘}

#创建包含多个键值对的字典使用“字典变量[键]”的形式可以查找字典中与键对应的值。例如,使用变量保存上述第二个字典,访问该字典中键C所对应的值,代码如下:dict_demo={'A':'123','B':'135','C':'680'}result=dict_demo['C']#访问键对应的值print(result)5.5.1字典介绍字典中的元素是没有顺序的,它是可以动态修改的,一般使用如下方法进行修改:例如,对上述字典中键A对应的值进行修改,代码如下所示:值=字典变量[键]dict_demo['A']='1*5@'#修改键对应的值print(dict_demo)5.5.1字典介绍注意,若键不在字典中,则会给字典增加一个键值对,例如:dict_demo['D']='789'#增加键值对print(dict_demo)5.5.2字典的常见操作函数/方法功能说明d.keys()返回字典d中所有的键信息d.values()返回字典d中所有的值信息d.items()返回字典d中所有的键值对信息d.get(key[,default])若键存在于字典d中返回其对应的值,否则返回默认值d.update()根据其他的键值对更新字典,键值对的编写形式是“键1=值1,键2=值2,...”d.clear()清空字典Python提供了一些针对字典的便捷方法和函数,可以方便地获取字典的信息、删除元素、清空字典等,使开发人员能够更加高效地解决字典相关问题。5.5.2字典的常见操作函数/方法功能说明d.pop(key[,default])若键存在于字典d中返回其对应的值,同时删除键值对,否则返回默认值d.popitem()随机删除字典d中的一个键值对deld[key]删除字典d中的某键值对len(d)返回字典d中元素的个数min(d)返回字典d

温馨提示

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

评论

0/150

提交评论