Python语言程序设计课件 第5章 元组与列表_第1页
Python语言程序设计课件 第5章 元组与列表_第2页
Python语言程序设计课件 第5章 元组与列表_第3页
Python语言程序设计课件 第5章 元组与列表_第4页
Python语言程序设计课件 第5章 元组与列表_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第五章元组与列表本章知识导读CATALOGUE目录01组合数据类型02元组03列表01组合数据类型5.1.1组合数据类型的概念计算机不仅能对单个变量表示的数据进行处理,通常情况下,计算机更需要对一组数据进行批量处理。这种能够表示多个数据的类型称为组合数据类型。5.1.1组合数据类型的概念序列类型一个元素向量,元素之间存在先后关系,通过序列号访问,元素之间不排他。序列类型包括字符串、元组和列表。集合类型映射类型一个元素集合,元素之间无序,相同元素在集合中唯一存在。“键-值”数据项的组合,每一个元素是一个键值对,表示为(key,value)。映射类型的典型代表是字典类型。1235.1.1组合数据类型的概念映射类型的典型代表是字典类型。集合类型是一个具体的数据类型,而序列类型和映射类型都是一类数据类型的总称。5.1.2序列通用操作操作符描述s+t拼接s和ts*n或n*s将序列s复制n次s[i]索引,返回序列s的第i个元素s[i:j:k]切片,返回序列s从i到j(不包括j)的步长为k的元素构成的子序列。k省略时,默认步长为1。len(s)返回序列s的长度(包含元素的个数)max(s)返回序列s的最大元素min(s)返回序列s的最小元素xins如果x是序列s的元素,返回True,否则返回Falsexnotins如果x不是序列s的元素,返回True,否则返回Falses.count(x)序列s中x的个数s.index(x[,i[,j]])序列s中从i到j位置中第一次出现元素x的位置(索引值)表5-1

序列通用操作02元组基本概念一种重要的映射类型数据结构,它采用与我们平时生活中的字典类似的方式,记录数据(类似于字的释义)和它的某种代表(类似于字本身)之间的对应关系,从而通过代表可以快速定位到数据格式元组(tuple)是置于小括号“()”中的一组数据,数据项之间用逗号“,”隔开。元组可以容纳任意类型的数据。一个元组内的元素可以是整数、浮点数、布尔值、字符串、甚至是其他元组或复杂的数据结构通过在圆括号内放置逗号分隔的元素列表。还可以使用内置的tuple()函数创建元组,其参数为空或range、列表等可迭代对象5.2.1元组的创建基本方法>>>integer_tuple=(10,20,30)#定义一个包含三个整数的元组>>>mixed_tuple=('Hello',100,200)#定义一个包含一个字符串和两个整数的元组>>>empty_tuple=()#定义一个空元组>>>t=tuple(range(3))#使用tuple()函数创建元组>>>print(t)(0,1,2)示例5.2.1元组的创建注意圆括号通常用于定义元组,但在某些情况下,即使没有圆括号,Python也能识别出元组;示例>>>t1=(42,)#正确的单元素元组定义>>>print(t1)(42,)注意示例当只有一个元素的元组被定义时,必须在元素后面加上逗号,以便与普通的圆括号表达式区分开来;>>>t2=(42)#错误的定义,这将是一个整数,而不是元组>>>print(t2)425.2.2多变量赋值元组支持多变量赋值,这是一种方便的特性,可以把序列解包,将多个元素分别赋值给多个独立的变量示例>>>x,y,z=(1,2,3)>>>print(x,y,z)123注意多变量赋值时,序列长度必须与变量数量一致,否则将报错;>>>m,n=(1,2,3)>>>print(m,n)ValueError:toomanyvaluestounpack(expected2)5.2.2多变量赋值除了简单的数值赋值,多变量赋值还可以用于更复杂的场景交换两个变量的值>>>a=10#交换两个变量的值,无需第三个变量>>>b=20>>>a,b=b,a>>>print(a)#输出:20>>>print(b)#输出:1020105.2.2多变量赋值示例>>>defget_person_info():#函数返回元组类型>>>name='Alice'>>>age=30>>>returnname,age>>>person_name,person_age=get_person_info()>>>print(person_name)>>>print(person_age)多变量赋值还可以用于从函数返回多个值。在Python中,函数可以返回一个元组,这个元组可以被接收它的变量自动解包;执行结果Alice3003列表5.3.1列表的创建基本概念列表(list)的创建通常指的是在编程语言中创建一个列表对象,这是一种常用的数据结构,用于存储多个元素,这些元素可以是相同类型或不同类型的数据。直接赋值法基本方法将一系列元素放在方括号“[]”内,并用逗号“,”分隔即可。列表中每个数据项称为一个元素,元素的类型无限制,可以将列表或元组作为列表的元素。>>>my_list=[1,'two',3.0,['four',5]]#创建一个包含整数、字符串和其他列表的混合类型列表>>>print(my_list)[1,'two',3.0,['four',5]]示例使用内置函数list()基本语法new_list=list(iterable)>>>print(list())#创建一个空列表[]>>>tuple_data=('a','b','c')#从元组创建列表>>>print(list(tuple_data))['a','b','c']>>>string_data="Hello"#从字符串创建列表>>>print(list(string_data))['H','e','l','l','o']示例使用split()函数基本方法split()函数通常用于字符串处理,它可以将一个字符串分割成多个子字符串,并返回一个包含这些子字符串的列表。默认情况下,它会根据空格来分割字符串,但也可以指定一个分隔符。如果想要使用不同的分隔符来分割字符串,可以在split()函数中传入该分隔符作为参数;>>>string1="高数

物理

英语

体育"#定义一个字符串>>>lst1=string1.split()#使用split()函数将字符串分割成列表,默认以空格作为分隔符>>>print(lst1)['高数','物理','英语','体育']>>>string2="高数,物理,英语,体育"#定义一个字符串>>>lst2=string2.split(',')#split(',')会将字符串按照逗号分割>>>print(lst2)['高数','物理','英语','体育']示例5.3.2列表的更新基本概念更新列表通常指的是修改列表中的元素。这可以通过多种方式实现,包括直接赋值、使用索引、切片以及内置函数等。直接赋值更新单个元素基本方法通过索引赋值来更新列表中指定序号元素值。>>>ls=[1,2,3,4,5]>>>ls[2]=10#更新索引为2的元素>>>print(ls)[1,2,10,4,5]示例使用切片更新多个元素基本方法切片允许指定一个范围来替换该范围内的所有元素。>>>ls=['apple','banana','cherry','date','elderberry']#更新索引从1到3的元素(不包括3)>>>ls[1:3]=['orange','pear']>>>print(ls)['apple','orange','pear','date','elderberry']示例>>>ls=['apple','banana','cherry','date','elderberry']#更新索引0、2、4的元素>>>ls[0::2]=['orange','pear']ValueError:attempttoassignsequenceofsize2toextendedsliceofsize3>>>ls[0::2]=['orange','pear','mango']>>>print(ls)['orange','banana','pear','date','mango']示例使用append()方法添加元素基本方法在列表末尾添加一个新元素,可以使用ls.append()方法。ls为操作的列表名,参数为增加的元素。>>>ls=[1,2,3]#在列表末尾添加元素4>>>ls.append(4)>>>print(ls)[1,2,3,4]示例使用extend()方法添加多个元素基本方法一次性添加多个元素到列表末尾,可以使用ls.extend()方法。这个方法接受一个可迭代对象,并将其中所有元素添加到列表中>>>ls1=['a','b','c']#使用extend()将ls2列表的元素添加进ls1列表>>>ls2=['d','e','f']>>>ls1.extend(ls2)>>>print(ls1)['a','b','c','d','e','f']示例使用insert()方法插入元素基本方法在列表的特定位置插入一个元素,可以使用ls.insert()方法。这个方法接受两个参数:要插入的位置的索引和要插入的元素>>>ls=[1,2,3]>>>ls.insert(1,'x')#在索引为1的位置插入元素>>>print(ls)[1,'x',2,3]示例5.3.3列表的删除ls.pop(index)基本方法用于移除列表ls中位置为index的一个元素,并且返回该元素的值。当括号中无参数时,默认移除列表的最后一个元素。pop()方法是唯一能删除列表元素又能返回值的列表方法,其返回值为被移除元素。>>>fruits=['apple','banana','cherry']>>>last_fruit=fruits.pop()#弹出列表中最后一个元素>>>second_fruit=fruits.pop(1)#弹出索引为1的元素>>>print(last_fruit)#输出:cherry>>>print(second_fruit)#输出:banana>>>print(fruits)#输出:['apple']示例ls.remove(value)基本方法用于移除列表ls中第一次出现的指定值value。如果列表中不存在该值,则会抛出一个ValueError。需要注意的是,如果列表中有多个相同的值,remove()只会移除第一次出现的那个值;如果列表中不存在指定的值,remove()将会抛出一个ValueError。>>>fruits=['apple','banana','cherry','banana','date']>>>fruits.remove('banana')#只移除第一个'banana'>>>print(fruits)#输出:['apple','cherry','banana','date']>>>fruits.remove('mango')#ValueError:list.remove(x):xnotinlist示例ls.clear()基本方法用于清空列表ls中的所有元素,将其变成一个空列表。这是一个非常直接且快速的方法来重置列表的状态,而不必重新创建一个新的列表。>>>fruits=['apple','banana','cherry']>>>fruits.clear()#删除列表中全部元素>>>print(fruits)#输出空列表:[]示例del关键字基本方法del关键字也可以用来删除列表中的元素,甚至是整个列表。使用del删除列表元素时,可以指定单个元素或者一个切片。>>>fruits=['apple','banana','cherry']>>>delfruits[1]#删除列表中序号为1的元素>>>print(fruits)#输出:['apple','cherry']>>>delfruits[:]#删除列表中全部元素>>>print(fruits)#输出空列表:[]示例5.3.4列表的排序ls.sort(key=None,reverse=False)基本方法用于就地对列表ls中的元素进行排序;两个可选参数:key和reverse;参数key可以指定排序时应用到每个参与排序元素上的规则,不影响列表中元素的值;参数reverse默认值为False,为升序排列,如果设置为True,则列表元素会被降序排列>>>numbers=[5,2,9,1,5,6]>>>numbers.sort()#升序排序>>>print(numbers)#输出:[1,2,5,5,6,9]>>>numbers.sort(reverse=True)#降序排序>>>print(numbers)#输出:[9,6,5,5,2,1]>>>words1=['apple','banana','cherry','date']#创建一个字符串列表>>>words1.sort(key=len)#key参数按字符串长度排序>>>print(words1)#输出结果:['date','apple','banana','cherry']>>>words2=['apple','Apple','app']>>>words2.sort(key=str.lower)#将字符串中所有字符转换成小写字符后排序>>>print(words2)#输出结果:['app','apple','Apple']示例ls.reverse()基本方法用于反转列表中元素的顺序。不同于sort()方法,reverse()并不进行排序,而是简单地将列表中的元素顺序颠倒过来。这个方法不接受任何参数,并且没有返回值,它直接修改原列表>>>numbers=[1,2,3,4,5]>>>numbers.reverse()#将列表元素逆序>>>print(numbers)#输出:[5,4,3,2,1]示例注意:sort()和reverse()这两种方法都会直接在原列表上进行操作,修改列表的元素顺序。如果只希望对列表进行排序或逆序,但又不希望改变原列表的数据顺序时,可以使用Python的内置函数sorted()和reversed()来达到目的。sorted(iterable,*,key=None,reverse=False)基本方法用于对任何可迭代对象(如列表、元组、集合等)进行排序,并返回一个新的排序后的列表。参数iterable为需要排序的可迭代对象。与sort()方法相同,也支持排序关键字参数key和反转参数reverse。参数星号(*)用于表示任何位于它之后的参数都必须使用关键字(keyword)形式来传递,即必须使用形如key=my_key_function,reverse=True的形式,星号本身不是参数。>>>numbers=[3,1,4,1,5,9,2,6]>>>print("排序后列表:",sorted(numbers))>>>print("原始列表:",numbers)排序后列表:[1,1,2,3,4,5,6,9]原始列表:[3,1,4,1,5,9,2,6]>>>ls=['63','18','7','02','5']>>>print("排序后列表:",sorted(ls))>>>print("按照整数排列后列表:",sorted(ls,key=int))排序后列表:['02','18','5','63','7']按照整数排列后列表:['02','5','7','18','63']示例reversed(iterable)基本方法它返回一个反向迭代器,可以用来反向遍历可迭代对象,如列表、元组、字符串等。这个函数不修改原始的可迭代对象,而是返回一个新的逆序迭代器。其中iterable是任何可迭代的对象>>>my_list=[1,2,3,4,5]>>>print(reversed(my_list))#返回反转后的迭代器对象<list_reverseiteratorobjectat0x0000021457AC9270>>>>print(list(reversed(my_list)))#可以用list()将反转结果转为列表[5,4,3,2,1]示例实例5-1:

成绩统计分析基本要求输入至少10位学生成绩(成绩为整数),输入时用逗号分隔。利用列表分析成绩,输出平均值、最高的3个成绩、最低的3个成绩以及成绩中位数。(1)考虑将用逗号分隔的成绩转成列表,可以使用字符串处理方法split()。(2)由于输入的是字符串类型,所以使用map()统一将成绩转为int类型。map()会根据提供的函数对指定序列做映射,这个函数的意义是将function应用于iterable的每一个元素。map()函数语法如下:map(function,iterable,…)分析whileTrue:#获取用户输入的成绩,转成列表input_scores=input("请输入至少10个成绩,用逗号分隔:")scores=list(map(int,input_scores.split(',')))#将输入数据转为列表iflen(scores)>=10:#检查输入的成绩数量是否至少为10个breakelse:print("输入的成绩数量不足10个,请重新输入!")count=len(scores)#计算成绩的个数scores.sort()#对列表成绩进行升序排序average=sum(scores)/count#计算平均成绩print(f'平均成绩是:{average:.2f}')#输出平均成绩#输出前3名的成绩#top_three=scores[-1:-4:-1]#可以直接对列表逆序切片top_three=scores[-3:]top_three.reverse()#如果需要从高到低进行输出,需要反转一下顺序print('前3名:',top_three)#输出后3名的成绩bottom_three=scores[:3]print('后3名:',bottom_three)#计算中位数ifcount%2==0:#元素数为偶数,中位数为中间两个数据的算数平均数median=(scores[count//2-1]+scores[count//2])/2else:#元素数为奇数,中位数即为列表中间的数字median=scores[count//2]#输出中位数print(median)执行结果请输入至少10个成绩,用逗号分隔:94,89,96,88,92,86,69,95,78,85平均成绩是:87.20前3名:[96,95,94]后3名:[69,78,85]88.5实例5-2:二维列表排序基本要求[['张龙','25701100106',99],['李华','25701100107',86],['赵明','25701100109',65],['王雪','25701100111',100],['钱君','25701100115',77],['孙琴','25701100117',59]],该列表中的每个元素仍为列表,这种形式称为二维列表。每个列表元素的三个数据分别代表姓名、学号和成绩。请对其分别按学生的学号、成绩从小到大进行排序,输出其前n项。n是由用户输入的非负整数,当n大于列表长度时,对整个列表进行排序输出。最后再按照优先级先成绩、后学号的顺序进行升序输出。二维列表的排序可以用lambda函数指定一个或多个排序关键字,这些关键字之间用逗号进行分隔,并按照优先顺序放在括号中。可以与sorted()结合使用。分析n=int(input())#用户输入一个整数n,该函数会等待用户输入并转换成整数类型#定义一个包含学生姓名、学号和分数的列表score=[['张龙','25701100109',99],['李华','25701100107',86],['赵明','25701100123',65],['王雪','25701100111',100],['钱君','25701100115',86],['孙琴','25701100117',59]]ifn>len(score):#检查n是否大于列表长度,是的话将n设置为列表的实际长度n=len(score)print('按照学号排序:')print(sorted(score,key=lambdax:x[1])[:n])#按每个子列表的第1个元素排序print('按照成绩排序:')print(sorted(score,key=lambdax:x[2])[:n])#按每个子列表的第2个元素排序print('优先按照成绩,成绩相同时按照学号排序:')print(sorted(score,key=lambdax:(x[2],x[0])))#多关键字逗号分隔执行结果3按照学号排序:[['李华','25701100107',86],['张龙','25701100109',99],['王雪','25701100111',100]]按照成绩排序:[['孙琴','25701100117',59],['赵明','25701100123',65],['李华','25701100107',86]]优先按照成绩,成绩相同时按照学号排序:[['孙琴','25701100117',59],['赵明','25701100123',65],['李华','25701100107',86]

温馨提示

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

评论

0/150

提交评论