py编程基础及导论 6_第1页
py编程基础及导论 6_第2页
py编程基础及导论 6_第3页
py编程基础及导论 6_第4页
py编程基础及导论 6_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

第5章容器与数据结构list列表·tuple元组·dict字典·str字符串面向师范生的Python编程导论本章概述2第5章容器与数据结构本章将学习Python中最重要的四种容器数据类型5.1list列表创建、索引、切片、操作方法、遍历5.2tuple元组创建、访问、与列表区别、遍历5.3dict字典键值对、创建、访问、修改、遍历5.4str字符串索引、切片、常用方法、遍历本章学习目标4第5章容器与数据结构知识目标理解列表的概念与结构掌握列表索引与切片理解元组与列表的区别掌握字典的键值对模型掌握字符串的常用方法理解四种容器的特点能力目标能创建和操作列表能使用列表方法管理数据能创建元组并遍历能使用字典存储键值对能使用字符串方法处理文本能用for循环遍历各种容器本章课时安排(4课时)6第5章容器与数据结构课时教学内容重点/难点活动设计第1课时list列表基础与操作索引与切片概念讲解+编程实践第2课时tuple元组与dict字典字典键值对概念对比学习+任务驱动第3课时str字符串与方法字符串方法灵活运用项目实践+代码调试第4课时综合应用与复习四种容器对比选择综合练习+测试提示本章是Python数据管理的核心章节,建议结合大量编程实践来掌握各种容器的特点。5.1list列表掌握列表的创建、索引、切片和常用操作方法5.1.1list简介9第5章容器与数据结构·5.1list列表什么是列表?Python的list类型也叫作列表,是Python中极其重要的数据类型。列表可以按照序列来存储数据,通过方括号[]定义,元素之间用英文逗号分隔。代码5.1#列表list类型样例list1=[]list2=[1,2,3,4,5]list3=['a','b','c']list4=[1,2,'a','b',99]list5=[1,[2,3],[4],'XXX']列表特点元素可以是任意类型列表特点元素也可以是列表(嵌套)代码5.1运行结果11第5章容器与数据结构·5.1list列表运行结果>>>list1的类型是:<class'list'>list2的类型是:<class

'list'>五种列表list1:空列表(0个元素)list2:整数列表list3:字符串列表list4:混合类型列表list5:嵌套列表核心认识列表可以存储任意类型列表可以混合存储列表可以嵌套空列表用[]表示type()可查看类型列表的核心属性13第5章容器与数据结构·5.1list列表属性说明示例元素列表中存储的数据[10,20,30]中的10,20,30索引值元素的位置编号第一个元素索引为0长度元素的个数len([10,20,30])=3正向索引从左到右,从0开始第一个元素:L[0]第二个元素:L[1]最后一个元素:L[len-1]反向索引从右到左,从-1开始最后一个元素:L[-1]倒数第二个:L[-2]第一个元素:L[-len]提示len()函数可以获取列表的长度(元素个数)。索引访问元素15第5章容器与数据结构·5.1list列表代码5.2#列表索引值使用案例L=['a','b','c','d','e']#第一个元素print(L[0])#第二个元素print(L[1])#最后一个元素print(L[-1])#输出列表长度print(len(L))运行结果>>>abe5列表索引值关系图17第5章容器与数据结构·5.1list列表a0-5b1-4c2-3d3-2e4-1正向索引反向索引提示正向索引从0开始(左到右),反向索引从-1开始(右到左)。两种方式可以互换使用。5.1.2修改列表元素19第5章容器与数据结构·5.1list列表修改元素值修改列表元素的值非常简单,只需要根据索引值为其赋值即可。代码5.3#修改列表元素的值L1=['Tom','Jim','Mike']L1[0]='Lily'print(L1)L1[1]=L1[2]print(L1)L2=[1,2,3,4,5]L2[2]=99print(L2)L2[-1]=L2[0]print(L2)运行结果>>>['Lily','Jim','Mike']['Lily','Mike','Mike'][1,2,99,4,5][1,2,99,4,1]增加列表元素21第5章容器与数据结构·5.1list列表代码5.4#列表增加元素案例my_list=[10,20,30,40,50]print(my_list)#列表中加入100my_list.append(100)print(my_list)#列表与列表连接L=[1,2,3]my_list=my_list+Lprint(my_list)#列表复制L=[1,2,3]*2print(L)运行结果>>>[10,20,30,40,50][10,20,30,40,50,100][10,20,30,40,50,100,1,2,3][1,2,3,1,2,3]列表增加元素的方法23第5章容器与数据结构·5.1list列表方法说明示例结果append(x)末尾添加一个元素[1,2].append(3)[1,2,3]+运算符连接两个列表[1,2]+[3,4][1,2,3,4]*运算符复制列表[1,2]*3[1,2,1,2,1,2]insert(i,x)在位置i插入x[1,3].insert(1,2)[1,2,3]extend(list)扩展列表[1,2].extend([3])[1,2,3]提示append()是最常用的方法,每次在列表末尾添加一个元素。+运算符创建新列表,append()修改原列表。列表切片25第5章容器与数据结构·5.1list列表切片(Slicing)列表切片使用切片运算符(:)截取列表的一部分,返回一个全新的子列表。代码5.5#列表切片运算案例my_list=[10,20,30,40,50]print(my_list)#切片从索引1开始,到索引3结束a=my_list[1:3]#[20,30]print(a)#从列表头开始,到索引3结束b=my_list[:3]#[10,20,30]print(b)#从索引2开始,直到列表最后c=my_list[2:]#[30,40,50]print(c)注意切片的结束索引不包含在内!my_list[1:3]返回索引1和2的元素,不包含索引3。切片运行结果与图解27第5章容器与数据结构·5.1list列表运行结果>>>[10,20,30,40,50][20,30][10,20,30][30,40,50]切片含义结果my_list[1:3]索引1到3(不含3)[20,30]my_list[:3]从头到3(不含3)[10,20,30]my_list[2:]从索引2到末尾[30,40,50]my_list[:]整个列表的副本[10,20,30,40,50]my_list[::2]每隔1个取1个[10,30,50]提示切片语法:list[start:stop:step],三个参数都可省略。删除列表元素29第5章容器与数据结构·5.1list列表代码5.6#删除列表元素my_list=[10,20,30,40,50]print(my_list)#使用pop()删除最后一个元素my_list.pop()print(my_list)#使用remove()删除某个元素my_list.remove(20)print(my_list)运行结果>>>[10,20,30,40,50][10,20,30,40][10,30,40]删除元素的方法对比31第5章容器与数据结构·5.1list列表方法说明示例结果pop()删除最后一个元素[1,2,3].pop()[1,2]pop(i)删除索引i的元素[1,2,3].pop(0)[2,3]remove(x)删除值为x的第一个元素[1,2,1].remove(1)[2,1]dellist[i]删除索引i的元素del[1,2,3][0][2,3]clear()清空列表[1,2].clear()[]pop()vsremove()pop():按索引删除remove():按值删除pop()返回被删除的元素remove()不返回值注意remove()只删除第一个匹配的元素,如果元素不存在会报错。列表遍历33第5章容器与数据结构·5.1list列表列表与for循环列表属于序列数据类型,可以使用for循环进行遍历。遍历是最常用的列表操作之一。代码5.7#计算列表所有元素的总和numbers=[10,20,30,40,50]s=0forninnumbers:s=s+nprint(f'列表数据总和为:{s}')运行结果>>>列表数据总和为:150两种遍历方式35第5章容器与数据结构·5.1list列表代码5.8#遍历列表numbers=[10,20,30,40,50]#使用索引值foriin

range(len(numbers)):

print(numbers[i])#不使用索引值forninnumbers:

print(n)直接遍历forninnumbers:更简洁,推荐使用索引遍历foriinrange(len()):适合需要索引的场景逆序遍历列表37第5章容器与数据结构·5.1list列表代码5.9#逆序遍历列表numbers=[10,20,30,40,50]#使用索引值foriin

range(len(numbers)-1,-1,-1):

print(numbers[i])运行结果>>>5040302010提示range(len-1,-1,-1):从最后一个索引开始,到0(不含-1),步长-1(递减)。索引越界错误39第5章容器与数据结构·5.1list列表代码5.10#索引越界示例numbers=[1,2,3,4,5]print(numbers)print(numbers[5])#索引5超出范围!运行结果>>>[1,2,3,4,5]Traceback(mostrecentcalllast):File"ex2.py",line3,in<module>

print(numbers[5])IndexError:listindexoutofrange注意列表有5个元素,索引0~4。访问索引5会报IndexError。索引从0开始,最大索引为len-1。列表方法汇总41第5章容器与数据结构·5.1list列表方法功能返回值append(x)末尾添加元素Noneinsert(i,x)在位置i插入元素Nonepop(i)删除并返回索引i的元素被删除的元素remove(x)删除第一个值为x的元素Nonesort()排序(升序)Nonereverse()反转列表Noneindex(x)返回x的索引索引值count(x)统计x出现次数次数len(list)获取列表长度长度提示sort()和reverse()直接修改原列表,不返回新列表。sorted(list)返回排序后的新列表。列表排序示例43第5章容器与数据结构·5.1list列表排序示例#列表排序scores=[85,92,78,96,65,88]print(f"原始:{scores}")#升序排序scores.sort()print(f"升序:{scores}")#降序排序scores.sort(reverse=True)print(f"降序:{scores}")#反转scores.reverse()print(f"反转:{scores}")运行结果>>>原始:[85,92,78,96,65,88]升序:[65,78,85,88,92,96]降序:[96,92,88,85,78,65]反转:[65,78,85,88,92,96]insert()与extend()方法45第5章容器与数据结构·5.1list列表insert/extend#insert()和extend()L=[1,2,4,5]#在位置2插入3L.insert(2,3)print(L)#[1,2,3,4,5]#extend()扩展列表L2=[1,2]L2.extend([3,4,5])print(L2)#[1,2,3,4,5]#对比appendL3=[1,2]L3.append([3,4])print(L3)#[1,2,[3,4]]注意append([3,4])添加一个列表作为元素;extend([3,4])将列表中的每个元素分别添加。index()与count()方法47第5章容器与数据结构·5.1list列表index/count#index()和count()fruits=["apple","banana","apple","cherry"]#index()查找元素位置pos=fruits.index("banana")print(pos)#1#count()统计元素出现次数cnt=fruits.count("apple")print(cnt)#2#检查元素是否存在print("cherry"

infruits)#Trueprint("grape"

infruits)#Falseindex()返回元素第一次出现的位置元素不存在会报ValueErrorcount()返回元素出现次数元素不存在返回0列表推导式初步49第5章容器与数据结构·5.1list列表列表推导式(ListComprehension)列表推导式是Python中创建列表的简洁方式,用一行代码即可完成循环创建列表的操作。推导式#传统方式创建平方列表squares=[]forxin

range(1,6):squares.append(x**2)print(squares)#[1,4,9,16,25]#列表推导式(一行代码)squares=[x**2

forxin

range(1,6)]print(squares)#[1,4,9,16,25]#带条件的列表推导式evens=[xforxin

range(1,11)ifx%2==0]print(evens)#[2,4,6,8,10]提示列表推导式是Python的特色语法,虽然简洁但初学者建议先掌握传统循环方式。5.1节小结51第5章容器与数据结构·5.1list列表列表基础用[]创建列表元素可以是任意类型索引从0开始反向索引从-1开始列表操作append()添加元素pop()/remove()删除元素[:]切片获取子列表sort()排序列表遍历forninlist:直接遍历foriinrange(len):索引遍历逆序:range(len-1,-1,-1)遍历是最常用操作常见错误IndexError:索引越界最大索引为len-1remove()元素不存在报错切片结束索引不包含5.1节测验(一)53第5章容器与数据结构·5.1list列表1.以下代码输出什么?L=[1,2,3,4,5]print(L[-1])A.1B.5C.-1D.报错2.L=[10,20,30],L[1:3]的结果是?A.[10,20]B.[20,30]C.[10,20,30]D.[20]3.以下哪个方法在列表末尾添加元素?A.insert()B.add()C.append()D.push()5.1节测验(二)55第5章容器与数据结构·5.1list列表1.len([1,[2,3],[4,5]])的结果是?A.5B.3C.2D.42.[1,2,3]+[4,5]的结果是?A.[5,7]B.[1,2,3,4,5]C.[[1,2,3],[4,5]]D.报错3.以下代码输出什么?L=[3,1,2]L.sort()print(L)A.[3,1,2]B.[1,2,3]C.[3,2,1]D.None5.2tuple元组理解元组与列表的区别,掌握元组的创建与遍历5.2.1tuple简介58第5章容器与数据结构·5.2tuple元组什么是元组?Python的tuple类型,也被称为元组,使用英文小括号()将元素包含其中,元素之间用英文逗号隔开。元组与列表有一个本质区别:创建好的元组元素不可修改,是只读列表。代码5.11#元组tuple样例t1=()#空元组t2=(1,2,3,4,5)#整数元组t3=('a','b','c')#字符串元组t4=1,2,'a','b',99

#不用括号也可以t5=(99,)#单元素元组(注意逗号)t6=(99)#这不是元组,是整数注意单元素元组必须加逗号:(99,)是元组,(99)是整数!元组创建结果60第5章容器与数据结构·5.2tuple元组运行结果>>>()t1的类型是:<class

'tuple'>(1,2,'a','b',99)t4的类型是:<class

'tuple'>(99,)t5的类型是:<class

'tuple'>99t6的类型是:<class

'int'>关键发现t4不用括号也是元组t5有逗号才是元组t6无逗号是整数不是元组空元组用()表示创建方式():空元组(a,b,c):标准方式a,b,c:省略括号(x,):单元素必须加逗号5.2.2元组数据访问62第5章容器与数据结构·5.2tuple元组代码5.12#元组数据访问T=(10,20,30,40,50)#根据索引访问元素print(T[0])#第一个元素print(T[1])#第二个元素print(T[-1])#最后一个元素print(len(T))#元组长度#元组切片print(T[2:4])#(30,40)print(T[:3])#(10,20,30)print(T[2:])#(30,40,50)与列表相同元组的索引和切片方式与列表完全一样,正向从0开始,反向从-1开始。元组不可修改64第5章容器与数据结构·5.2tuple元组代码5.13#尝试修改元组元素T=(10,20,30,40,50)print(T)#尝试修改某个元素T[1]=100print(T)运行结果>>>(10,20,30,40,50)Traceback(mostrecentcalllast):File"ex2.py",line7,in<module>T[1]=100TypeError:'tuple'objectdoesnotsupportitemassignment注意元组是只读类型,无法修改其元素的值!这是元组与列表最本质的区别。元组连接与复制66第5章容器与数据结构·5.2tuple元组元组支持连接与复制虽然元组元素不可修改,但元组支持连接(+)和复制(*)操作,因为这些操作创建新的元组,而非修改原元组。代码5.14#元组连接与复制t1=(10,20)t2=(30,40,50)t3=t1+t2#连接元组print(t3)t4=t2*3

#复制元组3次print(t4)运行结果>>>(10,20,30,40,50)(30,40,50,30,40,50,30,40,50)元组遍历68第5章容器与数据结构·5.2tuple元组代码5.15#元组遍历t1=("red","green","blue")#直接遍历print("直接遍历结果:")foritemint1:

print(item)#使用索引遍历print("索引遍历结果:")foriin

range(len(t1)):

print(t1[i])运行结果>>>直接遍历结果:redgreenblue索引遍历结果:redgreenblue列表与元组对比70第5章容器与数据结构·5.2tuple元组对比项list列表tuple元组定义符号方括号[]圆括号()可修改性可修改(mutable)不可修改(immutable)元素增删支持append/remove等不支持索引访问支持支持切片支持支持连接复制支持支持遍历支持支持适用场景需要修改的数据固定不变的数据性能稍慢稍快提示选择建议:数据需要修改时用列表,数据固定不变时用元组。元组更安全(不可修改)。元组解包72第5章容器与数据结构·5.2tuple元组元组解包(TupleUnpacking)元组解包是将元组中的元素分别赋值给多个变量的操作,这是Python中非常实用的特性。解包#元组解包#基本用法point=(3,4)x,y=pointprint(f"x={x},y={y}")#x=3,y=4#交换变量a,b=10,20a,b=b,aprint(f"a={a},b={b}")#a=20,b=10#多返回值defget_info():

return

"张三",20name,age=get_info()print(f"{name},{age}岁")提示元组解包使得多变量赋值和函数多返回值变得非常简洁。元组的方法74第5章容器与数据结构·5.2tuple元组元组的方法很少由于元组不可修改,元组只有两个方法:index()和count()。方法功能示例index(x)返回x的索引t.index(3)count(x)统计x出现次数t.count(1)len(t)元组长度len(t)max(t)最大值max(t)min(t)最小值min(t)sum(t)求和sum(t)示例#元组方法示例t=(3,1,4,1,5,9,2,6)print(t.index(4))#2print(t.count(1))#2print(max(t))#9print(sum(t))#31元组的典型应用场景76第5章容器与数据结构·5.2tuple元组坐标点point=(x,y)坐标固定不变如:(3,4),(0,0)RGB颜色color=(255,128,0)颜色值固定不变如:(0,0,0)黑色日期时间date=(2024,7,15)日期一旦确定不变如:(2024,1,1)多返回值returnname,age,score函数返回多个值自动打包为元组提示当数据不应被修改时,使用元组比列表更安全,能防止意外修改。5.2节小结78第5章容器与数据结构·5.2tuple元组元组基础用()创建元组单元素需加逗号可省略括号空元组用()表示元组操作索引访问与列表相同切片与列表相同支持+连接和*复制不可修改元素值与列表的区别列表可修改,元组不可列表用[],元组用()元组是只读列表元组性能略优于列表适用场景固定不变的数据用元组需要修改的数据用列表坐标点适合用元组常量数据适合用元组5.2节测验80第5章容器与数据结构·5.2tuple元组1.以下哪个是创建单元素元组的正确方式?A.(99)B.(99,)C.(99,)D.992.以下代码会发生什么?T=(1,2,3)T[0]=10A.T变成(10,2,3)B.报TypeError错误C.T变成(10,)D.什么都不发生3.(1,2)+(3,4)的结果是?A.(4,6)B.(1,2,3,4)C.((1,2),(3,4))D.报错5.3dict字典掌握字典的键值对模型,理解字典的创建、访问、修改与遍历5.3.1dict简介83第5章容器与数据结构·5.3dict字典什么是字典?Python的dict类型,也叫作字典,是一种通过键值对(key-valuepair)存储数据的数据类型。字典用花括号{}定义,每个键值对用冒号:分隔键和值,键值对之间用逗号分隔。键值对键(key):唯一标识值(value):对应的数据键必须是不可变类型键不能重复与列表的区别列表:通过索引访问字典:通过键访问列表:有序的序列字典:键值对映射示例#字典创建示例student={"name":"张三","age":20,"city":"北京"}创建字典85第5章容器与数据结构·5.3dict字典创建字典#创建字典的多种方式#方式1:直接创建d1={"name":"张三","age":20}print(d1)#方式2:空字典d2={}print(d2)#方式3:逐步添加d3={}d3["name"]="李四"d3["age"]=18print(d3)#方式4:dict()函数d4=dict(name="王五",age=22)print(d4)最常用直接使用{}创建是最常用的方式。访问字典元素87第5章容器与数据结构·5.3dict字典访问字典#访问字典元素student={"name":"张三","age":20,"city":"北京"}#通过键访问值print(student["name"])#张三print(student["age"])#20#使用get()方法访问print(student.get("city"))#北京print(student.get("phone"))#Noneprint(student.get("phone","未设置"))#未设置#获取所有键print(student.keys())#dict_keys(['name','age','city'])#获取所有值print(student.values())#dict_values(['张三',20,'北京'])提示get()方法更安全:键不存在时返回None或默认值,不会报错。用[]访问不存在的键会报KeyError。修改和添加字典元素89第5章容器与数据结构·5.3dict字典修改字典#修改和添加字典元素student={"name":"张三","age":20}#修改已有键的值student["age"]=21print(student)#{'name':'张三','age':21}#添加新的键值对student["city"]="上海"print(student)#{'name':'张三','age':21,'city':'上海'}#使用update()方法批量更新student.update({"age":22,"grade":"大三"})print(student)#{'name':'张三','age':22,'city':'上海','grade':'大三'}总结dict[key]=value:键存在则修改,不存在则添加。删除字典元素91第5章容器与数据结构·5.3dict字典删除字典#删除字典元素student={"name":"张三","age":20,"city":"北京","grade":"大二"}#使用del删除delstudent["grade"]print(student)#{'name':'张三','age':20,'city':'北京'}#使用pop()删除并返回值city=student.pop("city")print(f"删除的city:{city}")#删除的city:北京#使用clear()清空字典student.clear()print(student)#{}方法说明deldict[key]删除指定键值对dict.pop(key)删除并返回值dict.clear()清空整个字典字典遍历93第5章容器与数据结构·5.3dict字典字典遍历#字典遍历的三种方式student={"name":"张三","age":20,"city":"北京"}#方式1:遍历键forkeyinstudent:

print(f"{key}:{student[key]}")#方式2:遍历键值对forkey,valueinstudent.items():

print(f"{key}:{value}")#方式3:遍历值forvalueinstudent.values():

print(value)推荐forkey,valueindict.items()是最常用且清晰的遍历方式。字典应用场景95第5章容器与数据结构·5.3dict字典学生信息管理键:学号值:学生信息字典便于通过学号查找添加/删除方便配置管理键:配置项名值:配置值便于读取和修改结构清晰计数统计键:要计数的项值:出现次数如单词频率统计成绩分布统计数据映射键:原始值值:映射结果如英文转中文如数字转月份名字典应用示例:成绩统计97第5章容器与数据结构·5.3dict字典成绩统计#使用字典统计成绩等级分布scores=[85,92,78,65,95,82,73,88,90,58]grades={}forscoreinscores:

ifscore>=90:grade="A"

elifscore>=80:grade="B"

elifscore>=70:grade="C"

elifscore>=60:grade="D"

else:grade="F"

ifgradeingrades:grades[grade]=grades[grade]+1

else:grades[grade]=1print(grades)运行结果>>>{'B':3,'A':2,'C':2,'D':2,'F':1}嵌套字典99第5章容器与数据结构·5.3dict字典字典的值也可以是字典字典可以嵌套使用,即字典的值本身也是字典,这种结构常用于存储复杂的数据。嵌套字典#嵌套字典:学生信息school={

"class1":{

"students":["张三","李四"],

"teacher":"王老师"},

"class2":{

"students":["赵五","钱六"],

"teacher":"孙老师"}}#访问嵌套数据print(school["class1"]["teacher"])#王老师print(school["class2"]["students"][0])#赵五school["class1"]["students"].append("新同学")print(school["class1"]["students"])#['张三','李四','新同学']提示嵌套字典常用于表示结构化数据,如JSON数据、配置信息等。字典的keys()与values()101第5章容器与数据结构·5.3dict字典keys/values#keys()和values()scores={"math":90,"english":85,"science":92}#获取所有键keys=list(scores.keys())print(keys)#['math','english','science']#获取所有值vals=list(scores.values())print(vals)#[90,85,92]#获取键值对items=list(scores.items())print(items)#[('math',90),('english',85),('science',92)]#检查键是否存在print("math"

inscores)#Trueprint("history"

inscores)#False总结keys()返回所有键,values()返回所有值,items()返回所有键值对。字典方法汇总103第5章容器与数据结构·5.3dict字典方法功能返回值dict[key]获取/设置值值get(key,default)安全获取值值或默认值keys()获取所有键dict_keysvalues()获取所有值dict_valuesitems()获取键值对dict_itemspop(key)删除并返回值被删除的值update(d)批量更新Noneclear()清空字典Nonekeyindict检查键是否存在boollen(dict)键值对数量int提示get()是最安全的访问方式,推荐在不确定键是否存在时使用。5.3节小结105第5章容器与数据结构·5.3dict字典字典基础用{}创建字典键值对用冒号分隔键唯一且不可变值可以是任意类型字典操作dict[key]访问/修改get()安全访问del/pop删除update()批量更新字典遍历forkeyindict:遍历键fork,vinitems():遍历键值对forvinvalues():遍历值items()最常用适用场景需要键值映射时数据查找/统计配置管理信息存储5.3节测验107第5章容器与数据结构·5.3dict字典1.以下代码输出什么?d={"a":1,"b":2}print(d["a"])A.1B.2C.aD.报错2.如何安全地访问字典中可能不存在的键?A.dict[key]B.dict.get(key)C.dict.access(key)D.dict.find(key)3.以下哪种方式可以遍历字典的键值对?A.forkindict.keys()B.fork,vindict.items()C.forvindict.values()D.forkvindict5.4str字符串掌握字符串的索引、切片和常用方法5.4.1str简介110第5章容器与数据结构·5.4str字符串什么是字符串?Python的str类型,也叫作字符串,用于表示文本数据。字符串可以用单引号'、双引号"或三引号'''创建。字符串也是序列类型,支持索引和切片操作。字符串创建#字符串创建方式s1='Hello'

#单引号s2="World"

#双引号s3="Hello,World"

#包含逗号s4="Hesaid'hi'"

#双引号中包含单引号s5='''多行字符串'''#三引号(多行)print(s1,s2,s3,s4)提示字符串是不可变类型(与元组类似),修改字符串会创建新的字符串。字符串索引112第5章容器与数据结构·5.4str字符串字符串索引#字符串索引s="Hello"print(s[0])#H-第一个字符print(s[1])#e-第二个字符print(s[-1])#o-最后一个字符print(s[-2])#l-倒数第二个字符print(len(s))#5-字符串长度运行结果>>>Heol5与列表相同字符串的索引方式与列表完全一致,正向从0开始,反向从-1开始。字符串切片114第5章容器与数据结构·5.4str字符串字符串切片#字符串切片s="Hello,World"print(s[0:5])#Helloprint(s[7:])#Worldprint(s[:5])#Helloprint(s[-5:])#Worldprint(s[::2])#HloWrd(每隔1个取)print(s[::-1])#dlroW,olleH(反转)切片含义结果s[0:5]索引0到4Hellos[7:]索引7到末尾Worlds[:5]开头到索引4Hellos[-5:]最后5个字符Worlds[::-1]反转字符串dlroW,olleH字符串方法:upper()与lower()116第5章容器与数据结构·5.4str字符串upper()将字符串中所有字母转换为大写lower()将字符串中所有字母转换为小写示例#upper()和lower()示例s="Hello,World"print(s.upper())#HELLO,WORLDprint(s.lower())#hello,worldprint(s)#原字符串不变:Hello,World#实际应用:不区分大小写的比较s1="Python"s2="python"print(s1==s2)#Falseprint(s1.lower()==s2.lower())#True注意字符串方法不修改原字符串,而是返回新的字符串!字符串是不可变类型。字符串方法:strip()118第5章容器与数据结构·5.4str字符串strip()方法strip()用于去除字符串首尾的空白字符(空格、制表符、换行符)。还有lstrip()和rstrip()分别只去除左侧或右侧。strip示例#strip()示例s="Hello,World"print(f"[{s}]")#[Hello,World]print(f"[{s.strip()}]")#[Hello,World]print(f"[{s.lstrip()}]")#[Hello,World]print(f"[{s.rstrip()}]")#[Hello,World]#去除指定字符s2="##Hello##"print(s2.strip("#"))#Hello提示strip()在处理用户输入时非常有用,可以去除输入时多带的空格。字符串方法:split()120第5章容器与数据结构·5.4str字符串split()方法split()将字符串按照指定分隔符分割,返回一个列表。不指定分隔符时默认按空白字符分割。split示例#split()示例s="HelloWorldPython"result=s.split()print(result)#['Hello','World','Python']#按逗号分割s2="2024,7,15"parts=s2.split(",")print(parts)#['2024','7','15']#按指定分隔符s3="a-b-c-d"result=s3.split("-")print(result)#['a','b','c','d']提示split()是字符串转列表最常用的方法。字符串方法:join()122第5章容器与数据结构·5.4str字符串join()方法join()是split()的逆操作,将列表中的字符串元素用指定分隔符连接成一个字符串。join示例#join()示例#用空格连接words=['Hello','World','Python']s=''.join(words)print(s)#HelloWorldPython#用逗号连接parts=['2024','7','15']s2=','.join(parts)print(s2)#2024,7,15#用换行符连接lines=['第一行','第二行','第三行']s3='\n'.join(lines)print(s3)#第一行#第二行#第三行对比split():字符串→列表;join():列表→字符串。字符串方法:replace()124第5章容器与数据结构·5.4str字符串replace()方法replace()将字符串中的指定子串替换为新的子串,返回新的字符串。replace示例#replace()示例s="Hello,World"#替换World为Pythonnew_s=s.replace("World","Python")print(new_s)#Hello,Python#替换所有匹配项s2="a-b-c-d"new_s2=s2.replace("-","+")print(new_s2)#a+b+c+d#限制替换次数s3="a-b-c-d"new_s3=s3.replace("-","+",2)print(new_s3)#a+b+c-d(只替换前2个)提示replace(old,new,count):count参数可选,限制替换次数。字符串方法:format()与f-string126第5章容器与数据结构·5.4str字符串format示例#format()方法s1="我叫{},今年{}岁".format("张三",20)print(s1)#我叫张三,今年20岁#带索引的formats2="{0}说{1},{1}很重要".format("老师","编程")print(s2)#老师说编程,编程很重要#f-string(推荐)name="李四"age=22s3=f"我叫{name},今年{age}岁"print(s3)#我叫李四,今年22岁#f-string支持表达式s4=f"明年我{age+1}岁"print(s4)#明年我23岁提示f-string是Python3.6+引入的,最简洁直观,推荐使用。字符串遍历128第5章容器与数据结构·5.4str字符串字符串遍历#字符串遍历s="Hello"#直接遍历每个字符forchins:

print(ch)#使用索引遍历foriin

range(len(s)):

print(f"s[{i}]={s[i]}")运行结果>>>Hellos[0]=Hs[1]=es[2]=ls[3]=ls[4]=o字符串方法汇总130第5章容器与数据结构·5.4str字符串方法功能示例upper()转大写'abc'.upper()→'ABC'lower()转小写'ABC'.lower()→'abc'strip()去首尾空白'hi'.strip()→'hi'split(sep)分割为列表'a,b'.split(',')→['a','b']join(list)列表连接为字符串'-'.join(['a','b'])→'a-b'replace(old,new)替换子串'a-b'.replace('-','+')→'a+b'find(sub)查找子串位置'abc'.find('b')→1count(sub)统计子串次数'aaa'.count('a')→3startswith(s)是否以s开头'Hi'.startswith('H')→Trueendswith(s)是否以s结尾'Hi'.endswith('i')→Truelen(s)字符串长度len('abc')→3字符串查找:find()与count()132第5章容器与数据结构·5.4str字符串find/count#find()和count()s="Hello,Hello,World"#find()查找子串位置pos=s.find("Hello")print(pos)#0(第一个出现的位置)pos2=s.find("Hello",1)print(pos2)#7(从位置1开始查找)pos3=s.find("Python")print(pos3)#-1(未找到返回-1)#count()统计子串出现次数cnt=s.count("Hello")print(cnt)#2#in运算符检查包含print("World"

ins)#Trueprint("Python"

ins)#Falsefind()返回位置,未找到返回-1count()返回出现次数,未找到返回0字符串判断:startswith()与endswith()134第5章容器与数据结构·5.4str字符串判断方法#startswith()和endswith()s="Hello,World"#判断开头print(s.startswith("Hello"))#Trueprint(s.startswith("World"))#False#判断结尾print(s.endswith("World"))#Trueprint(s.endswith("Hello"))#False#实际应用:判断文件类型filename="photo.jpg"iffilename.endswith(".jpg")orfilename.endswith(".png"):

print("这是图片文件")#判断邮箱email="test@"ifemail.endswith("@"):

print("内部邮箱")提示startswith()和endswith()常用于文件类型判断、数据验证等场景。字符串类型判断方法136第5章容器与数据结构·5.4str字符串方法功能示例isdigit()是否全是数字'123'.isdigit()→Trueisalpha()是否全是字母'abc'.isalpha()→Trueisalnum()是否全是字母或数字'a1'.isalnum()→Trueisspace()是否全是空白''.isspace()→Trueisupper()是否全是大写'ABC'.isupper()→Trueislower()是否全是小写'abc'.islower()→True实际应用#实际应用:验证用户输入age=input("请输入年龄:")ifage.isdigit():age=int(age)

print(f"你的年龄是{age}岁")else:

print("请输入有效数字!")字符串连接与重复138第5章容器与数据结构·5.4str字符串字符串运算字符串支持+连接和*重复操作,与列表的运算方式相同。连接重复#字符串连接与重复#+连接s1="Hello"+""+"World"print(s1)#HelloWorld#*重复s2="Abc"*3print(s2)#AbcAbcAbc#分隔线line="-"*30print(line)#------------------------------#实际应用:生成表格边框print("="*20)print("学生成绩表")print("="*20)提示字符串的+和*运算与列表完全一致,因为字符串也是序列类型。5.4节小结140第5章容器与数据结构·5.4str字符串字符串基础用引号创建字符串支持索引和切片与列表切片语法一致字符串是不可变类型常用方法upper()/lower():大小写转换strip():去除空白split():分割为列表join():连接为字符串replace():替换子串格式化输出f-string(推荐)format()方法f{name}嵌入变量支持表达式遍历forchins:遍历字符foriinrange(len):索引遍历字符串是序列类型与列表遍历方式相同5.4节测验142第5章容器与数据结构·5.4str字符串1.以下代码输出什么?s="Hello"print(s[1:3])A.HeB.elC.ellD.ell2.以下代码输出什么?"a,b,c".split(",")A.'abc'B.['a','b','c']C.'a,b,c'D.['abc']3.字符串是不可变类型,以下哪个说法正确?A.字符串方法修改原字符串B.字符串方法返回新字符串C.字符串不能调用方法D.字符串可以修改字符四种容器对比总结144第5章容器与数据结构特性list列表tuple元组dict字典str字符串定义符号[](){key:val}'或"可修改是否是否有序是是否(Python3.7+有序)是索引访问数字索引数字索引键访问数字索引切片支持支持不支持支持遍历forxinforxinforkinforchin长度len()len()len()len()元素类型任意任意键不可变字符提示选择容器的关键:是否需要修改?是否需要键值映射?元素类型是否统一?本章总结list列表:用[]创建,支持索引、切片、增删改查,是最常用的容器类型tuple元组:用()创建,不可修改,适合存储固定不变的数据dict字典:用{}创建键值对,通过键访问值,适合数据映射和查找str字符串:用引号创建,支持索引和切片,有丰富的方法索引:正向从0开始,反向从-1开始切片:[start:stop:step],stop不包含在内遍历:forxincontainer是通用的遍历方式列表方法:append、insert、pop、remove、sort等字符串方法:upper、lower、strip、split、join、replace等f-string是最推荐的字符串格式化方式关键术语147第5章容器与数据结构术语英文说明列表list可修改的有序序列元组tuple不可修改的有序序列字典dict键值对映射字符串str不可变的字符序列索引index元素的位置编号切片slice截取序列的一部分键值对key-valuepair字典中的映射关系遍历traversal依次访问每个元素不可变类型immutable创建后不可修改可变类型mutable创建后可修改课后习题149第5章容器与数据结构习题1:列表操作创建一个包含10个整数的列表,实现以下操作:求最大值、最小值、平均值;排序后输出;删除所有偶数。习题2:元组与列表转换创建一个元组T=(1,2,3,4,5),将其转换为列表,修改第二个元素为99,再转回元组。习题3:学生信息字典创建一个字典存储学生信息(姓名、年龄、班级、成绩),实现添加、修改、删除和遍历输出。习题4:字符串处理输入一个英文句子,统计其中每个单词出现的次数,用字典存储并输出。习题5:成绩分析输入若干学生成绩存储在列表中,用字典统计各等级(A/B/C/D/F)的人数并输出。下章预告151第5章容器与数据结构下一章预告本章学习了四种容器数据类型,下一章我们将学习函数的定义与使用,通过函数将代码组织成可复用的模块,提高编程效率。本章核心list列表的创建与操作tuple元组的只读特性dict字典的键值对str字符串的方法四种容器的遍历下章内容函数的定义与调用函数参数与返回值变量的作用域递归函数模块与导入提示建议在下一章前熟练掌握列表和字典的基本操作,这是后续学习的基础。练习:列表综合操作153第5章容器与数据结构任务练习创建一个列表[5,3,8,1,9,2,7],实现以下操作:1.排序输出2.添加元素1003.删除元素34.求最大值和最小值5.切片获取前3个元素参考代码#列表综合操作L=[5,3,8,1,9,2,7]#1.排序L.sort()print(f"排序后:{L}")#2.添加L.append(100)print(f"添加后:{L}")#3.删除L.remove(3)print(f"删除后:{L}")#4.最大最小print(f"最大:{max(L)},最小:{min(L)}")#5.切片print(f"前3个:{L[:3]}")练习:字典综合操作155第5章容器与数据结构任务练习创建一个商品价格字典,实现以下功能:1.添加商品2.修改价格3.删除商品4.查询商品5.遍历输出所有商品参考代码#商品价格管理products={"苹果":5.0,"香蕉":3.5,"橙子":4.0}#1.添加商品products["葡萄"]=8.0#2.修改价格products["苹果"]=5.5#3.删除商品delproducts["香蕉"]#4.查询商品print(f"橙子价格:{products.get('橙子')}")#5.遍历输出forname,priceinproducts.items():

print(f"{name}:{price}元")练习:字符串处理157第5章容器与数据结构任务练习输入一个英文句子,实现以下功能:1.统计单词数量2.全部转大写3.替换空格为下划线4.反转字符串参考代码#字符串处理sentence=input("请输入英文句子:")#1.统计单词数量words=sentence.split()print(f"单词数:{len(words)}")#2.转大写print(f"大写:{sentence.upper()}")#3.替换空格print(f"替换:{sentence.replace('','_')}")#4.反转print(f"反转:{sentence[::-1]}")常见错误总结159第5章容器与数据结构注意错误1:索引越界列表有n个元素,索引范围是0到n-1。访问L[n]会报IndexError。注意错误2:修改元组/字符串元组和字符串是不可变类型,尝试修改元素会报TypeError。注意错误3:字典键不存在用dict[key]访问不存在的键会报Ke

温馨提示

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

评论

0/150

提交评论