版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
01020304第2章数据类型与数据对象基础2.1数据类型概述2.2数值类型与对象2.3字符串类型与对象2.4列表类型与对象052.5元组类型与对象2.6字典类型与对象2.7集合类型与对象2.8综合应用案例060708第2章数据类型与数据对象基础2.1.1数据类型的相关概念Python内置数据类型是Python语言核心,程序启动时解释器会对其进行初始化,用户无需显示加载即可直接使用使用他们创建对象。2.1数据类型概述1.数据类型在Python中,数据类型是对数据的一种分类方式,定义了数据的存储格式、取值范围以及可以对其进行的操作。Python中有多种内置数据类型,包括三大类:基本数据类型(int、bool、float、str、complex)容器数据类型(list、tuple、dict、set、frozenset)空类型(NoneType)。其中空类型只有一个值None,表示空或缺失。通常用于表示函数没有返回值。2.类与数据对象Python采用统一的类型与类机制管理数据丰富的内置类(如int、str、list等):这些类由语言标准库预定义并实现了各自数据类型的操作方法。用户自定义类:通过class关键字自定义类,在类定义中实现特定功能的方法来操作该类型的数据。内置类和用户自定义类共同构成了Python面向对象编程的基础,通过方法封装实现了对不同类型数据的操作支持。类是创建对象的模板,所有数据对象都是特定类的实例,例如,"good"是由str类创建的字符串对象,"good"就是str类的一个实例。Python执行操作时,解释器会通过对象的类型确定其可调用方法,这种动态绑定机制是Python多态性的核心实现方式。例如:对于表达式3*2,解释器识别操作数为int类型,调用int.__mul__()方法计算结果,而对于表达式'abc'*'def',解释器检测到str类未定义__mul__方法,则触发TypeError异常。请注意由同一个类创建的不同对象,均可以调用该类中定义的方法完成相应的操作。例如,在int类中定义了bit_count方法,那么,所有由int类创建的整数对象,均可以通过调用该方法,得到整数对应二进制数中1的个数。第2章数据类型与数据对象基础2.1.2变量与对象引用在Python中,为了方便操作数据对象,使用变量存储数据对象的引用,引用是对象在内存中的唯一标识,在对象生命周期内固定且唯一。2.1数据类型概述1.变量的命名规则变量的命名规则遵循标识符的命名规则。2.变量引用对象赋值语句“变量名=对象”:对象的内存地址绑定到变量名上【特别提示】(1)变量名区分大小写。如
age
和Age
是二个不同的变量。一般根据变量引用数据对象的作用或特点,以相应的英文单词、汉字拼音或其缩写命名。(2)变量存储的是数据对象的引用,而不是数据对象的数据。可以利用Python的内置函数id得到对象的引用标识。如:id(3)可以得到整数对象3在内存中的引用标识。(3)多个变量可以同时引用同一个对象。如:a=23;b=23。这里,a和b
引用的都是23这个整数对象。(4)可以将变量理解为对象的名称。a=b=3,表示整数对象3有a和b两个名称。如果再执行a=2,则表示整数对象2的名称为a。(5)利用一条语句可同时为多个变量创建引用。如:a=b=3表示变量a.b均引用整数对象3。c,d=1,2表示变量c引用整数对象1、d引用整数对象2。【练一练2.1】在PythonIDLE交互式窗口中,测试id(a)、id(b)、id(23)的值是否相同第2章数据类型与数据对象基础2.1.2变量与对象引用Python使用引用计数来跟踪数据对象的引用数量。当一个对象的引用计数为0时,即没有任何变量引用该对象时,Python的垃圾回收机制会自动回收该对象所占用的内存空间。2.1数据类型概述3.对象的引用计数与垃圾回收【特别提示】(1)利用del语句可以删除对象的引用(引用计数减1)。如:当执行a=b=23456时,创建整数对象23456并被a.b同时引用(引用计数=2)。delb使引用计数减至1,对象仍被a引用。dela后引用计数归零,解释器自动回收该对象内存空间。(2)Python对小整数的访问进行了优化,在解释器启动时就预先创建了[-5,256]范围内的整数对象池。程序运行时,这些范围内的整数会直接从对象池中获取引用,而非新建对象。由于这些对象始终存在于内存中,它们的引用计数不会归零,因此在整个程序运行期间,这些范围内的整数对象都是唯一的,可以被多个变量引用。(3)对于一些短字符串(通常是只包含字母、数字和下画线等的字符串),Python会采用字符串驻留机制。在这种机制下,相同内容的字符串在内存中只会创建一次,多个变量引用该字符串时,引用的是同一个字符串对象。这些驻留的字符串对象不会因为引用计数变为0而被清除。第2章数据类型与数据对象基础2.1.2变量与对象引用2.1数据类型概述4.显示数据对象的数据Python的内置函数print用以显示数据对象的数据。语法格式:print(value,...,sep='',end='\n')函数作用:将各数据对象转换为字符串对象后输出(默认输出目标是显示器)。参数说明:value,...:任意个数据对象。可以是变量或有效的Python表达式;sep:显示多个数据对象时,数据对象之间的分隔符,默认值为空字符;end:显示全部数据对象后,需要最后显示的字符,默认值是换行符。【例2.1】x,y=1,2#x=1,y=2print(x,"+",y,"=",x+y,sep='',end=';')print(x,"-",y,"=",x-y,sep='')print("有田不耕仓禀虚","有书不读子孙愚。",sep=',')print("宝剑锋从磨砺出","梅花香自苦寒来。",sep=',')1+2=3;1-2=-1有田不耕仓禀虚,有书不读子孙愚。宝剑锋从磨砺出,梅花香自苦寒来。输出结果:第2章数据类型与数据对象基础2.2.1创建数值对象Python的基本数值类型包括int、bool、float和complex。这些类型创建的实例对象均为不可变对象(immutableobjects),即对象创建后其内部数据不可被修改。2.2数值类型与对象主要有二种方式:使用字面量或类的构造函数创建数值对象1.使用字面量创建数值对象字面量是利用一组特定符号(称为界定符)表示固定值的方法,也就是在代码里直接写出来的具体数据。借助字面量能够直接创建数据对象数据类型前导符创建数值对象示例备注int0b,0B,0o,0O,0x,0X0b1011、0o72、0xAC.526整数类型bool(无)True、False布尔类型float(无)-3.26、2.16E5浮点类型complex(无)6.2+3j复数类型【特别提示】(1)int类型表示任意大小的整数(包括正整数、负整数和零),Python对整数对象采用变长存储机制,根据数值大小动态分配内存,理论上数值大小仅受系统内存限制。bool是int的子类型,表示逻辑值(True/False),其中True对应1,False对应0。(2)由float类创建的实例称为浮点数对象,用于表示带小数部分的实数。每一个实数占用64位(8字节)内存空间。由于64位只能表示264个离散值,而实数是无限的,因此计算机会自动选择最接近的可表示值进行存储,这种近似处理会导致存储值与原始值之间存在微小误差,并在连续运算时影响计算精度。(3)complex为复数类型,用于创建复数(对象)。复数由实部和虚部组成,虚部以j或J结尾。如:3+6j表示实部为3、虚部为6的复数。复数对象的实部和虚部均为浮点数。第2章数据类型与数据对象基础2.2.1创建数值对象Python的基本数值类型包括int、bool、float和complex。这些类型创建的实例对象均为不可变对象(immutableobjects),即对象创建后其内部数据不可被修改。2.2数值类型与对象2.使用类的构造函数创建数值对象类类型构造函数格式实例类类型构造函数格式实例int整数类(1)int():创建值为0的int对象。
(2)int(x):根据x对象创建int对象。x可以是由一个十进制整数组成的字符串,或者是int或float类型的对象。
(3)int(x,base):将字符串x按指定进制base转换为整数,base是一个[2,36]上的整数。base为0时则由x的前导符确定数制。x为符合进制要求的数字字符串,否则抛出ValueError。a=int()#创建值为0的int对象a=int(23.56)#由float对象创建int对象,等效于a=23a=int("123")#由str对象创建int对象,等效于a=123a=int("12",16)#由str对象创建int对象,等效于a=0x12a=int("0x12",0)#由str对象创建int对象,等效于a=0x12bool布尔类bool(x):该函数用于将任意对象x
转换为布尔值(True或False)。x默认值为False。对于数值类型,零值(如0、0.0)会被转换为False,非零值转换为True;对于容器类型,空容器返回False,非空容器返回Truea=bool()
#a=Falsea=bool("good")
#a=Truea=bool(23.21)
#a=Truea=bool(0)
#a=Falsefloat浮点类float(x):x为数值对象,或为数值组成的字符串对象,其缺省值为0。a=float("23.17")#a=23.17a=float()#a=0.0a=float(15)#a=15.0
complex复数类complex(real,imag),该函数创建一个复数对象,其中real为实部,imag为虚部;两个参数均接收整数或浮点数,若省略则默认为0a=complex()#a=0j,a=complex(23,7)#a=23+7j第2章数据类型与数据对象基础2.2.2数值对象的运算与运算规则Python内置数值类型均定义了各种方法实现数值运算。这些运算主要包括算术运算、赋值运算、比较运算、逻辑运算和位运算。2.2数值类型与对象1.算术运算运算符运算法则示例+加法,数值相加a=2+3#a=5-减法,数值相减a=7;b=5;c=a-b#c=2*乘法,数值相乘a=2*3#a=6/除法,数值相除,结果为float对象a=8;b=2;c=a/b#c=4.0//向下整除,返回不超过商的最大整数a=13;b=5;c=a//b#c=2%求余,返回数值相除的余数a=13;b=5;c=a%b#c=3;c=-23//5#c=-5**幂运算,计算一个数的指定次幂a=3**2#a=9【特别提示】设x=a%b,y=a//b,则有:x=a-y*b。如:a=-7;b=2,则x=1,y=-4。第2章数据类型与数据对象基础2.2.2数值对象的运算与运算规则Python内置数值类型均定义了各种方法实现数值运算。这些运算主要包括算术运算、赋值运算、比较运算、逻辑运算和位运算。2.2数值类型与对象2.赋值运算"="是赋值运算符。算术运算符与赋值运算符"="可结合为新的赋值运算符:+=、-=、*=、/=、//=、%=、**=。如:x+=2等效于x=x+2、x**=2等效于x=x**2。3.比较运算运算符运算法则示例==等于,判断两个值是否相等a==b#False>大于,判断左边的值是否大于右边的值a>b#True>=大于等于,判断左边的值是否大于或等于右边的值a>=b#True<小于,判断左边的值是否小于右边的值a<b#False<=小于等于,判断左边的值是否小于或等于右边的值a<=b#False!=不等于,判断两个值是否不相等a!=b#False【特别提示】数值对象按值比较大小。逻辑值与数值对象比较大小时,True视为1,False视为0。判断浮点数是否为零时,应避免直接使用==运算符。正确做法是检查其绝对值是否小于设定的误差容限(也称为容忍度),如abs(x)<1e-6。【练一练2.2】设a,b均为整数,分析表达式(a>b)*a+(a<=b)*b能否得到a,b的最大值。第2章数据类型与数据对象基础2.2.2数值对象的运算与运算规则Python内置数值类型均定义了各种方法实现数值运算。这些运算主要包括算术运算、赋值运算、比较运算、逻辑运算和位运算。2.2数值类型与对象4.逻辑运算6.身份运算a=b=3;c=4print(aisc) #输出:Falseprint(anotisc) #输出:Trueprint(aisb) #输出:Trueprint(anotisb) #输出:False运算符运算法则andAandB:在A为False时返回A,否则返回BorAorB:在A为True时返回A,否则返回BnotnotA:在A为False是返回True,否则返回Falsex=60print(xand3.16)#输出:3.16print(xor3)#输出:60print((x>=0)and(x<70))#输出:True【例2.4】运算符运算法则is引用同一对象返回True,否则返回Falsenotis引用不同的对象返回True,否则返回False【例2.6】身份运算符用于判断两个变量是否引用同一个数据对象【练一练2.3】假定a,b的值均为整数,构造一个返回a,b中最小值的表达式。第2章数据类型与数据对象基础2.2.2数值对象的运算与运算规则Python内置数值类型均定义了各种方法实现数值运算。这些运算主要包括算术运算、赋值运算、比较运算、逻辑运算和位运算。2.2数值类型与对象5.位运算【特别提示】使用位运算可以高效操作二进制数的低k位:n&(~(2**k-1))将低k位清零;n^(2**k-1)将低k位取反;n|(2**k-1)将低k位置1。说明:2**k-1生成k位全1掩码。【例2.4】123&87的值为83;123|87的值为127;123^87的值为44,计算过程:位运算只能用来操作int对象,根据int对象的二进制值(补码形式)逐位进行运算运算符运算法则&按位与,对应位都为1时结果为1,否则为0|按位或,对应位都为0时结果为0,否则为1^按位异或,对应位不同时结果为
1,否则为0~按位取反,0转换为1,1转换为0<<左移,将二进制数向左移动指定的位数,右侧补0>>右移,将二进制数向右移动指定的位数,右侧删除123对应二进制数为0b1111011,87对应二进制数为0b1010111。说明:(1)a<<n等效于a*2n,a>>n等效于a//2n,其中n为正整数。(2)位运算符与"="运算符可结合成新的运算符。如:设x是整数,则:x>>=2等效于x=x>>2x&=123等效于x=x&123第2章数据类型与数据对象基础2.2.2数值对象的运算与运算规则Python内置数值类型均定义了各种方法实现数值运算。这些运算主要包括算术运算、赋值运算、比较运算、逻辑运算和位运算。2.2数值类型与对象7.运算符的优先级与结合性【例】x=y=2由于"="运算符具有右结合性,因此,会先由变量y引用数据对象2,再由x指向y的引用。即等效于y=2;x=y。运算符优先级决定表达式中各运算符的执行顺序,高优先级先计算。同级运算符按结合性执行:左结合(从左到右)或右结合(从右到左)。在实际应用中,如果不明确各运算符的优先级,可以使用圆括号。圆括号也是运算符,且运算优先级最高。优先级运
算
符结合性优先级运
算
符结合性1()无9^、|左2**右10==、!=、>、>=、<、<=
左3~右11=、%=、/=、//=、-=、+=、*=、**=右4+、-(正负号)右12is、isnot左5*、/、//、%左13in、notin左6+、-左14not右7>>、<<左15and、or左8&右
高低第2章数据类型与数据对象基础2.2.3数值对象的内置方法Python中,十六进制表示浮点数的格式为:0x[整数部分].[小数部分]p[指数部分]。0x是十六进制前辍,整数部分和小数部分均是十六进制数,指数部分为十进制整数,
p
表示指数部分是2的指数。如0x15.8p-1表示0x15.8*2-1,即(1*16+5+8/16)*0.5=10.75。2.2数值类型与对象1.内置方法的查询在PythonIDLE的Shell窗口中,利用dir函数可以快速查询数据类型的所有属性与内置方法。格式:dir(类名或对象名)2.数值对象的内置方法内置方法定义了操作对应类数据对象的各种方法。例如:int类对象:bit_count():用以返回整数的绝对值的二进制数中1的个数,
bit_length():用以返回整数的绝对值的二进制数位数。不包含前辍0b。bool类是int类的子类,具有与int类相同的内置方法。如True.bit_length()、False.bit_count()。float类对象:is_integer():用以判断浮点数是否为整数。如:x=3.0,则x.is_integer()的值为True;
hex():返回浮点数的十六进制表示形式(字符串)。
fromhex(string):用以从十六进制浮点数string(字符串)得到十进制浮点数。如:float.fromhex(“0x15.8p-1”),其值为10.75。第2章数据类型与数据对象基础2.3.1创建字符串str类型即字符串类型,是最常用的数据类型,用于文本数据的处理。在str类中,定义了各种方法实现字符串的运算、索引、切片、查询、替换、分割、连接等操作。2.3字符串类型与对象1.使用字面量创建字符串创建字符串对象有三种基本方式:使用字面量、使用str类的构造函数或input函数。字符串由零个、1个或多个字符组成。可以使用单引号、双引号或三引号界定文本内容来创建字符串。如:'abc'、"abc"、'''abc'''、"""abc"""均表示同一个字符串。使用字面量创建字符串时,可使用转义字符转义字符作用示例\n换行"123,45\n890,67"\t制表符,常用于多行文本的垂直对齐"123\t45\n890\t67"\nnn2或3位八进制整数对应字符"\62"、"\101"\xnn2位十六进制整数对应字符"\x41"\'单引号,作字符使用"Heisn\'tastudent."\"双引号,作字符使用"Hesay:\"Good\""\\反斜扛,作字符使用"C:\\abc\\datas.txt"【特别提示】在字符串的引号前添加前辍“r”,表示字符串中所有字符均为原义字符,不进行转义。如:r"c:\datas.txt"等效于"c:\\datas.txt"【练一练2.4】运行以下代码,观察输出结果并分析原因s="sid\tname\tage\n2401\tWanBin\t20\n2402\tLiuYing\t19\n\101\t\102\t\x43"print(s)第2章数据类型与数据对象基础2.3.1创建字符串str类型即字符串类型,是最常用的数据类型,用于文本数据的处理。在str类中,定义了各种方法实现字符串的运算、索引、切片、查询、替换、分割、连接等操作。2.3字符串类型与对象2.使用str类的构造函数创建字符串创建字符串对象有三种基本方式:使用字面量、使用str类的构造函数或input函数。str类的构造函数为str(x),将任意对象x转换为字符串表示形式。如:str(123)的值为"123"、str(-2.36)的值为"-2.36"、str(False)的值为"False"。3.使用input函数创建字符串input(prompt):内置函数,用于接收用户键盘输入,并以字符串形式返回输入内容。可选参数prompt作为输入提示信息(缺省时无提示),通常用于指导用户输入特定类型的数据。【特别提示】(1)程序执行到input函数时,会暂停执行,等待从键盘输入数据,直到按【Enter】键。(2)从键盘输入的任何数据均作字符串处理,由input函数返回。若想获得数值数据,可以利用下面的方法将输入的数值字符串转换为数值对象:方法一:利用类的构造函数。int()和float()函数分别用于将符合格式的数字字符串转换为整数和浮点数。例如,int("123")将字符串转换为整数123,而float("2.3")转换为浮点数2.3。若字符串不符合数字格式,这两个函数会抛出ValueError异常。方法二:利用Python内置函数eval。eval(s)执行字符串s中的Python代码并返回结果。例如
eval("2*3")返回6。但直接执行未经验证的字符串存在安全风险,应避免用于用户输入。【练一练2.5】测试表达式eval("5*6+3")的值。设:a=1、b=2,测试eval("a+b")的值。(3)input()函数仅原样返回用户输入的字符串,不会验证内容是否符合提示要求。例如:s=input("输入一个整数:"),若输入"abc",则s=="abc"(不检查是否为整数)。第2章数据类型与数据对象基础2.3.2字符串的索引与切片字符串由字符组成,是序列。序列是一种基本的数据容器类型,它的元素在容器中按顺序排列,每个元素在容器中都有固定的位置(称为索引)。2.3字符串类型与对象1.左索引与右索引左索引(也称正向索引),从序列的起始位置开始计数,索引值从0开始依次递增。右索引(也称负向索引),从序列的末尾位置开始计数,索引值从-1开始依次递减。左索引和右索引统称索引,通过索引可访问序列元素。访问格式:序列对象[索引]【例2.7】设s="abcde",则s[0]、s[-5]均表示s的第一个元素("a"),s[4]和s[-1]均表示s的最后一个元素("e")。【练一练2.6】设a为字符串,包含n个字符,则:(1)a的左索引有效值范围是多少?(2)a的右索引有效值范围是多少?(3)如果a的某元素左索引为k,则其右索引为多少?第2章数据类型与数据对象基础2.3.2字符串的索引与切片字符串的索引和切片只能读取不能修改字符,因为字符串是不可变对象。2.3字符串类型与对象2.字符串的切片序列切片从start开始按step方向选取元素,直到(但不包含)stop位置,即实际提取区间为[start,stop)。步长step的正负决定提取方向:step>0时,为正向切片,从start向右按步长提取,至stop前结束(start→stop),start默认为0。step<0时,为反向切片,从start向左按步长提取,至stop后结束(start←stop),start默认为-1。切片操作:序列对象[start:stop:step]【例2.8】a="abcdefg"b=a[1:4:2] #正向切片:b="bd"b=a[::-1] #负向切片:b=a[-1::-1]="gfedcba"b=a[-5:] #正向切片:b=a[-5::1]="cdefg"b=a[::-2] #负向切片:b=a[-1::-2]="geca"。【练一练2.7】设a="abcd",分析a[1:0]和a[1:2:-1]的值。第2章数据类型与数据对象基础2.3.3字符串的运算2.3字符串类型与对象运算说明实例加法运算将二个字符串首尾相连,形成一个新的字符串"Good"+"morning":"Goodmorning"数乘运算字符串与一个整数相乘,表示将字符串重复连接,生成一个新的字符串,重复的次数由整数确定。如果整数为零或负整数,得到的是空字符串。"ab"*3:"ababab""ab"*(-3):空字符串成员运算利用成员运算符"in"、"notin",可判断一个字符串是否在另一个字符串中,空字符串是任何字符串的成员。"a"in"dab":True"a"notin"dab":False第2章数据类型与数据对象基础2.3.4字符串的格式化f-string格式化字符串用于将Python表达式嵌入到字符串中,运行时会自动计算嵌入的表达式的值,并将表达式的值作为字符串的一部分。2.3字符串类型与对象【例2.9】输入二个整数,输出它们的和s=input("输入二个整数a,b:")a,b=eval(s)print(a,"+",b,"=",a+b,sep='')print(f"{a}+{b}={a+b}")1.f-string格式化字符串f-string格式化字符串需在字符串引号前添加f或F前缀,并将表达式置于{}内,表达式可为变量、运算或函数调用等合法Python代码。表达式格式:{表达式}
或
{表达式:格式化选项}其中格式化选项用于指定数据显示的格式要求,例如控制数字精度(.2f)、字符串居中对齐方式(^)等。3+4=73+4=7两条输出语句的输出结果完全相同。但第2条输出语句利用f-string格式化字符串后,对输出字符串的格式描述更加直观、清淅、简洁。第2章数据类型与数据对象基础2.3.4字符串的格式化f-string格式化字符串用于将Python表达式嵌入到字符串中,运行时会自动计算嵌入的表达式的值,并将表达式的值作为字符串的一部分。2.3字符串类型与对象格式化选项说明实例整数通过f-string的{value:format_spec}语法实现,支持进制转换、对齐控制和符号显示等核心功能。其格式化规则遵循[填充][对齐][符号][#][0][宽度][,][类型]结构。num=int(input("输入一个整数:"))print(f"{num}={num:#b}={num:#o}={num:#x}")#不同进制输出选项的使用full_format=f"{num:*^+#030,d}"
#各格式化选项的使用print(full_format)在设置格式化选项时,各选项顺序必须按给定结构顺序指定,+/-/空格始终在左侧,不受对齐影响,若同时指定填充符和[0],填充符生效(如:*<覆盖0),#仅与B.o、x/X搭配才显示前缀(如0x)。浮点数浮点数格式化采用{value:format_spec}语法,支持对齐、符号、宽度、精度及类型等选项,其格式化规则遵循[填充][对齐][符号][#][0][宽度][,][.精度][类型]结构,其中必填项为精度和类型(如.2f),其他为可选。value=12345.6789#格式:填充符=*|对齐=居中|符号=+|宽度=15|千位分隔|精度=2|类型=fformatted=f"|{value:*^+15,.2f}|"print(formatted)#输出:|***+12,345.68***|必须指定.N精度和类型(如.3f),否则引发ValueError。优先级顺序:填充符>补零(如:*<覆盖0)。符号位置:正负号始终在最左侧,不受对齐影响。关于类型标识符,f:定点小数;e/E:科学计数法;%:百分比(自动乘100)。通过灵活组合这些规则,可满足财务报表、科学数据、日志排版等场景的精确需求练一练2.8】设a=2.15、b=2.25、c=2.35,分析f"a={a:.1f},b={b:.1f},c={c:.1f}"的值,并说明理由。第2章数据类型与数据对象基础2.3.4字符串的格式化f-string格式化字符串用于将Python表达式嵌入到字符串中,运行时会自动计算嵌入的表达式的值,并将表达式的值作为字符串的一部分。2.3字符串类型与对象格式化选项说明字符串格式化选项的一般形式为:[fill][align]width。其中:(1)width
:指定输出字符串的最小宽度。即字符串占用的字符位数。1个半角字符占1个字符位,1个全角字符占2个字符位。如果width小于字符串必须的占用字符位数,则按实际位数输出。否则,按width指定的宽度输出字符串。(2)align:当字符串占用width指定的宽度存在多余位时,设置字符串对齐方式。可设置为"<"(左对齐)、">"(右对齐)、"^"(居中对齐),缺省时为右对齐。如name="Alice",则f"{name:<7}"表示占7个字符位,且左对齐。因此,得到的字符串是"Alice"(右侧有2个空格)。(3)fill:当字符串占用width指定的宽度存在多余位时,设置多余位显示的字符。默认使用空格。【练一练2.9】name="Alice",分析以下表达式的值:(1)f"{name:^7}";(2)f"{name:*^9}"第2章数据类型与数据对象基础2.3.5字符串的内置方法str类中定义了大量的内置方法操作字符串。2.3字符串类型与对象1.count方法s="Ilovemymotherland"print(s.count('m'))#统计字符串s中'm'出现的次数。输出:2print(s.count('m',8)#从索引为8的字符开始统计'm'在s中出现的次数。输出:1print(s.count('m',3,9)#统计s中[3,9)索引范围内'm'出现的次数。输出:1语法格式:count(sub[,start[,end]])参数说明:在字符串的索引范围[start,end)统计字符串sub出现的次数。start的默认值为0,end的默认值为字符串的长度。【练一练2.10】输入一段英文,统计其中的单词个数。假定单词之间以一个空格分隔。没有多余的空格,首尾也没有空格,且字符串不为空。【例2.12】第2章数据类型与数据对象基础2.3.5字符串的内置方法str类中定义了大量的内置方法操作字符串。2.3字符串类型与对象2.find方法语法格式:find(sub[,start[,end]])参数说明:在字符串的[start,end)索引范围从左到右查找字符串sub,返回首次找到的位置索引(左索引)。如果未找到,返回值为-1。【练一练2.11】设s="Ilovemymotherland",确定'm'在s中首次出现的位置索引和最后出现的位置索引。【例】设s="Ilovemymotherland",则s.find('m')的返回值为7、s.find('m',8)的返回值为10【特别提示】(1)rfind函数与find函数功能相似,但在索引范围内从右到左查找。(2)index函数与find函数相似,除字符串外,还可以查找列表,元组元素,未找到时会抛出异常。rindex函数与index函数相似,但从右到左查找。第2章数据类型与数据对象基础2.3.5字符串的内置方法str类中定义了大量的内置方法操作字符串。2.3字符串类型与对象3.replace方法语法格式:replace(old,new,count=-1)参数说明:将字符串中的old字符串替换为new字符串。count指定替换次数(默认值为-1,表示全部替换)。【例2.13】s="[runoob]"s=s.replace("[","")#删除s中的"[":s="runoob]"s=s.replace("]","")#删除s中的"]":s="runoob"s=s.replace("o","x",1)#将s中的"o"替换为"x",仅替换一次print(s)#输出:runxob第2章数据类型与数据对象基础2.3.5字符串的内置方法str类中定义了大量的内置方法操作字符串。2.3字符串类型与对象4.split方法语法格式:split(sep=None,maxsplit=-1)参数说明:使用sep(默认为空格)将字符串分割为多个子字符组成的列表。参数maxsplit指定分割的数目(默认值为-1,表示全部分割)。【例2.14】s="78926583"a=s.split() #使用空格分割sprint(a) #输出列表a:['78','92','65','83']s="78,92,65,83" a=s.split(",") #使用","分割sprint(a) #输出列表a:['78','92','65','83']a=s.split(",",2) #使用","分割s,只需要得到2个数据print(a) #输出列表a:['78','92','65,83']【特别提示】使用空格分割字符串时,多个连续的空格视为一个空格,且忽略首尾空格。第2章数据类型与数据对象基础2.3.5字符串的内置方法str类中定义了大量的内置方法操作字符串。2.3字符串类型与对象5.join方法语法格式:join(iterable)参数说明:将可迭代对象iterable的元素(元素必须是字符串)用指定的字符串连接生成一个新的字符串。【例2.14】a=['78','92','65','83']s="-".join(a) #使用"-"将a的元素连接成字符串print(s) #输出:78-92-65-83s=";".join(a) #使用";"将a的元素连接成字符串print(s) #输出:78;92;65;83【练一练2.12】输入一段英文,统计其中的单词个数。单词之间以空格分隔。可以有多余的空格,首尾也可能有空格,字符串可以为空。第2章数据类型与数据对象基础2.4.1创建列表2.4列表类型与对象1.使用字面量创建列表对象list为列表类型,可使用一对方括号[]作为界定符创建列表。如:[1,4,9],也可创建空的列表,如a=[]。构造函数格式:list(x)参数说明:其中x为可迭代对象。缺省x时创建一个空列表。如:list("abc")的值为['a','b','c']、list()的值为[]。列表(list)是Python中最常用的可变序列,支持索引、切片和动态修改,同时可以存储任意类型的数据,并支持迭代遍历。2.利用list类的构造函数创建list对象3.使用字符串的内置函数split创建列表【特别提示】str、list、tuple、dict、set、frozenset等容器类型对象均是可迭代对象。字符串的内置函数split可以将字符串分割为多个子字符串组成的列表,常用于数据的提取。例如,s="879675639082",则s.split()的值为列表[87,96,75,63,90,82]。第2章数据类型与数据对象基础2.4.2列表的索引与切片2.4列表类型与对象1.通过索引操作列表元素(1)通过索引获取列表元素例如:a=[1,2,3,4,5,6],则:b=a[0]+a[-1]的值为7。其中a[0]是a的第1个元素1,a[-1]是a的最后一个元素6。(2)通过索引修改列表元素例如:a=[1,2,3,4,5,6],则执行a[2]=7后a的值为[1,2,7,4,5,6]。(3)通过索引删除列表元素例如:a=[1,2,3,4,5,6],则执行dela[2]后a的值为[1,2,4,5,6]。列表与字符串相似,也是有序序列,支持索引和切片。语法规则与字符串的索引和切片相似。列表是可变对象,可以通过索引或切片修改列表元素。2.通过切片操作列表元素(1)通过切片提取列表的部分元素例如:a=[1,2,3,4,5,6],则执行b=a[::2]后b的值为[1,3,5]。执行b=a[::-2]后b的值为[6,4,2]。(2)通过切片修改列表部分元素例如:a=[1,2,3,4,5,6],则执行a[::2]=[0,8,9]后a的值为[0,2,8,4,9,6]。如果再执行a[::-2]=[1,3,5],则a的值为[0,5,8,3,9,1]。(3)通过切片删除列表部分元素例如:a=[1,2,3,4,5,6],则执行dela[1:4]后a的值为[1,5,6]。【练一练2.13】设a=[1,2,3,4,5,6,7,8,9,10](1)将a的元素中,左索引值能被3整除的元素值增加1。(2)删除a的最后3个元素。(3)将a的最后一个元素值改为a的第一个元素值。第2章数据类型与数据对象基础2.4.3列表的运算2.4列表类型与对象运算名称说明举例加法运算:+“+”可以将二个列表的元素合并起来生成一个新的列表。a=[1,2,3,4]、b=[5,6],则a+b的值为[1,2,3,4,5,6]在列表中,+=表原地修改,+为创建新对象,二者不等效。设a=b=[1,2,3,4]、c=[5,6]、n=id(a),则:(1)a+=c的作用是:将c的元素添加到a之后。a的值为[1,2,3,4,5,6],且id(a)的值与n的值相同。即:a引用对象没有改变,但a引用对象的元素发生了变化。由于b和a引用的是同一对象,因此b的值也发生了变化,值为[1,2,3,4,5,6]。(2)a=a+c的作用是:将a和c的元素放在一起创建新的列表对象。a的值为[1,2,3,4,5,6],且id(a)的值与n的值不同。即:a引用对象已经改变,这时b的值没有变化。数乘运算:*整数可与列表进行乘法运算,表示列表重复连接。如果是0或负整数,则得到的是一个空的列表。[1,2]*3的值为[1,2,1,2,1,2][1,2]*0的值为[]【练一练2.14】a=b=[1,2],试分析a*=2与a=a*2对变量b的影响。第2章数据类型与数据对象基础2.4.3列表的运算2.4列表类型与对象运算名称说明举例成员运算可以使用运算符“in”或“notin”判断数据是否是列表的元素。a=[1,2,3,4]1ina为True1notina的值为False比较运算二个列表可以比较大小。比较规则:从左到右逐元素比较,直到能够比较出大小为此。如果有一列表再无元素可比,则有元素的列表大。比较a=[2,1,3,5]与b=[2,1]的大小,其过程为:(1)比较a[0]与b[0]的大小。二者相等,继续。(2)比较a[1]与b[1]的大小。二者相等,继续。(3)比较a[2]与b[2]的大小。b[2]不存在,由比较规则,a>b。【练一练2.15】比较['10','2','3']与['2','1','3']的大小。第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。1.append方法语法格式:append(object)参数说明:在列表的尾部添加元素object。【练一练2.16】设a=[1,2,3],比较下面语句之间的差别:(1)a.append(4);(2)a+=[4]。2.clear方法语法格式:clear()作用:直接删除列表的全部元素,原列表成为空列表。【练一练2.17】设a=[1,2,3],(1)测试执行a.clear()前后a是否改变了对象引用。(2)执行a=[]与执行a.clear()、dela有什么差别?第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。3.copy方法语法格式:copy()参数说明:返回列表的一个浅拷贝。【特别提示】:在Python中,浅拷贝会创建一个新的对象,新对象的元素是原始对象元素的引用。【例2.16】a=[1,2]b=a.copy()print(id(a),id(b))print(id(a[0]),id(b[0]),id(a[1]),id(b[1]))id(a)与id(b)不同,因为浅拷贝会创建一个新的对象。id(a[0])与id(b[0])相同,id(a[1])与id(b[1])相同,因为浅拷贝得到的对象的元素是原始对象元素的引用,a[0]与b[0]引用的是同一对象,a[1]与b[1]引用的是同一对象。【特别提示】b=a.copy()等效于b=a[:],但与b=a有差别。如果列表的元素是可变对象,如a=[[1,2],[2,3]];b=a.copy();b[0][0]=5。由于a[0]与b[0]引用的是同一对象[1,2]。因此,b[0][0]=5是对b[0]元素的修改,同时也是对a[0]元素的修改。故a[0]和b[0]均被修改为[5,2]。第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。4.count方法语法格式:count(value)参数说明:统计元素value在列表中出现的次数。设a=[2,3,4,1,2,2],则a.count(2)的返回值为3,即2在列表a中出现了3次。5.extend方法语法格式:extend(iterable)参数说明:将可迭代对象iterable的元素添加到列表。【练一练2.18】设a[1,2,3]、b=[3,4,5],比较下列语句之间的差别:(1)a.extend(b);(2)a.append(b);(3)a+=b设a[1,2,3]、b=[3,4,5],c="56789",则执行a.extend(b)后,a的值为[1,2,3,3,4,5]。再执行a.extend(c)后,a的值为[1,2,3,3,4,5,'5','6','7','8','9']第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。6.index方法语法格式:index(value,start,stop)参数说明:在列表元素的索引范围[start,stop)搜索value。如果value存在,则返回左起第一次出现的左索引。否则,抛出异常。start为搜索的开始索引,默认值为0。stop为搜索的终止索引(不包含终止索引对应的元素,默认搜索start开始之后的全部元素)。a=[2,3,1,4,7,3,5,6,8,3]print(a.index(3)) #输出3在a中第一次出现的索引:1print(a.index(3,2)) #输出3在a中索引2之后出现的索引:5print(a.index(3,2,5)) #在索引范围[2,5)内搜索3出现的索引:触发异常。7.insert方法语法格式:insert(index,object)【例2.18】参数说明:在列表索引位置index插入数据对象object。如果index>0且超过索引范围,则在列表最后添加元素。如果index<0且超过索引范围,则在列表最前添加元素。a=[1,2]a.insert(0,3) #在列表索引0之前插入3:a=[3,1,2]a.insert(9,4) #索引超过范围:a=[3,1,2,4]a.insert(-9,5) #索引超过范围:a=[5,3,1,2,4]第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。8.pop和remove方法语法格式:pop(index=-1)参数说明:删除列表中索引为index的元素。缺省时删除列表最后一个元素。如果index超过索引范围,则触发异常。如果删除成功,函数的返回值为删除的元素。语法格式:remove(value)【例2.19】参数说明:删除列表中值为value的元素。如果值不存在,则触发异常。如果值不唯一,则删除左起第一个元素。该函数的返回值为Nonea=[1,2,3,1,4,1]b=a.pop() #删除列表最后一个元素:a=[1,2,3,1,4];b=1c=a.pop(-2) #删除列表中索引为-2的元素:a=[1,2,3,4];c=1a.remove(1) #删除左起第一个1:a=[2,3,4]dela[::2] #删除列表的子序列:a=[4]【特别提示】也可使用del语句删除列表的元素或子序列。第2章数据类型与数据对象基础2.4.4列表的内置方法2.4列表类型与对象列表类型中定义了大量的内置方法操作列表。9.reverse方法语法格式:reverse()作用:列表逆序。如a=[1,2,3],则a.reverse()后a=[3,2,1]10.sort方法语法格式:sort(key,reverse)【例2.20】参数说明:对列表排序,如果参数reverse缺省,或值为False,则对列表元素按升序排序,否则为降序排序。参数key指定排序的依据,可以是类名或函数名,表示按key转换后的数据对象的大小比较规则进行排序a=[4,2,1,3]a.sort() #升序排序:a=[1,2,3,4]a.sort(reverse=True) #降序排序:a=[4,3,2,1]b=["23","8","10"]b.sort() #字符串升序排序:b=["10","23","8"]b.sort(key=int) #元素转换为int对象后升序排序:b=["8","10","23"]【练一练2.19】试比较a.reverse()与a=a[::-1]的区别。【特别提示】key只是元素比较大小的依据,并不实际改变元素的数据类型。字符串的大小比较规则是:逐字符,按Unicode码值比较大小。因此,"10"<"8"。b.sort(key=int)中,设置了b元素比较大小的规则是:将元素经int转换后再比较大小。因此,比较"10"与"8"的大小时,实际上比较的是int("10")与int("8")的大小第2章数据类型与数据对象基础2.5.1创建元组2.5元组类型与对象元组(tuple)是一种不可变的有序序列,支持索引和切片,适用于存储固定不变的数据集合。1.使用字面量创建元组对象tuple为元组类型,可使用一对圆括号()作为界定符创建元组。如:(1,4,9)。也可创建空的元组,如a=()。构造函数格式:tuple(x)例:tuple("abc")的值为('a','b','c'),tuple()的值为()2.利用tuple类的构造函数创建元组对象3.使用使用Python内置函数eval创建元组【特别提示】创建只包含一个元素的元组时,需在元素之后添加一个半角逗号。如:a=(1,)。参数说明:s为数值序列组成的字符串,数值之间使用半角逗号分隔,函数返回值为元组。常用于将输入的数值序列字符串转换为数值序列。参数说明:其中x为可迭代对象。缺省x时创建一个空元组。函数格式:eval(s)s=input("输入一个数值序列:")a=eval(s)【例2.21】运行以上代码,输入:87,96,75,63,90,82后回车,得到s="87,96,75,63,90,82"。执行a=eval(s)后,得到a的值为:(87,96,75,63,90,82)第2章数据类型与数据对象基础2.5.2元组的运算2.4列表类型与对象运算名称说明举例加法运算:+“+”可以将二个元组的元素合并起来生成一个新的元组a=(1,2,3,4)、b=(5,6),则a+b的值为(1,2,3,4,5,6)对于元组而言,a+=b与a=a+b是完全等效的,都会创建一个新元组再赋值给a,这是因元组是不可变对象,所以都会生成一个新对象。数乘运算:*整数可与元组进行乘法运算,表示元组重复连接为一个新的元组。如果是0或负整数,则得到的是一个空元组。(1,2)*3的值为(1,2,1,2,1,2)(1,2)*0的值为()【练一练2.20】a=b=(1,2),试分析a*=2与a=a*2对变量b的影响。成员运算可以使用运算符“in”或“notin”判断数据是否是元组的元素a=(1,2,3,4)则1ina的值为True、1notina的值为False比较运算二个元组可以比较大小,比较规则与列表的比较规则完全相同:从左到右逐元素比较,直到能够比较出大小为此。如果有一个元组再无元素可比,则有元素的元组大。【练一练2.21】比较('10','2','3')与('2','1','3')的大小第2章数据类型与数据对象基础2.5.3元组的索引与切片2.5元组类型与对象元组与字符串相似,也是有序序列,支持索引和切片。语法规则与字符串的索引和切片相同。可以通过索引和切片读取元组的元素,但不能修改元素,因为元组是不可变对象。【练一练2.22】设a=(1,2,3,4,5,6,7,8,9,10),试分析下列表达式的值:(1)a[0]+a[-2];(2)a[::-3];(3)a[1:6:2]第2章数据类型与数据对象基础2.5.4元组的内置方法2.4列表类型与对象元组是Python中的不可变序列,由于不可变性,其内置方法比列表少。1.count方法语法格式:count(object)参数说明:统计元组中元素object的出现次数。a=(1,2,1,4,5,1,7,8,9,1),则a.count(1)的值为4。2.index方法语法格式:index(value,start,stop)参数说明:在元组元素的索引范围[start,stop)搜索value。如果value存在,则返回左起第一次出现的左索引。否则,抛出异常。start为搜索的开始索引,默认值为0。stop为搜索的终止索引(不包含终止索引对应的元素,默认搜索start开始之后的全部元素)【例2.22】a=(2,3,1,4,7,3,5,6,8,3)print(a.index(3)) #输出3在a中第一次出现的索引:1print(a.index(3,2)) #输出3在a中索引2之后出现的索引:5print(a.index(3,2,5)) #在索引范围[2,5)内搜索3出现的索引:触发异常第2章数据类型与数据对象基础2.6.1创建字典2.6字典类型与对象字典(dict)是Python中基于键值对的无序可变集合,通过唯一键实现快速数据存取,适合存储具有明确映射关系的数据。1.使用字面量创建字典对象可使用一对大括号{}作为界定符创建字典。元素为键值对,格式为“键:键值”。构造函数格式:(1)dict():创建一个没有元素的空字典。(2)dict(x):x必须是dict、list或tuple对象。如果x是list或tuple对象,则其元素必须是包含二个元素的可迭代对象。例如:设a=[('name','ZSan'),('age',20),('score',89)],则dict(a)的值为:a={'name':'ZSan','age':20,'score':89}(3)dict(**a):该格式要求按照“键名=值”的格式传递一组或多组数据。例如:设d=dict(name='ZSan',age=20,score=89),则d的值为:d={'name':'ZSan','age':20,'score':89}2.利用dict类的构造函数创建字典对象如:a={'moon':'月亮','sun':'太阳','earth':'地球'}。第2章数据类型与数据对象基础2.6.1创建字典2.6字典类型与对象字典(dict)是Python中基于键值对的无序可变集合,通过唯一键实现快速数据存取,适合存储具有明确映射关系的数据。2.利用dict类的构造函数创建字典对象【特别提示】字典键必须是不可变对象(数值、字符串、元组可用,列表不可用)。创建字典时,"键名=值"格式要求键名为字符串变量名,不适用于数值/元组键。合并字典方法:1.dict(a,b):要求键唯一,仅适用于字符串键(如dict({'A':90},{'B':80}))2.{a,b}:更灵活,允许键重复(后者覆盖前者),支持任意键类型(如{{1:90},{1:80}}→{1:80})解包说明:
解包字典为key=value参数;*解包序列为位置参数;
均不能直接用于赋值语句【练一练2.23】(1)能否使用dict('a'=38,'b'=76)创建字典?(2)能否使用dict(**a)格式创建字典{1:'PN',2:'QR',3:'WU'}?(3)如何将字符串"a=1,b=9,p=3"转换为字典{'a':1,'b':9,'p':3}?(4)将字典{'A':90,'B':65,'C':83}转换为列表,并分析转换结果产生的原因。(5)设x={'A':90,'Y':87}、y={'Y':69,'S':82},分别使用a=dict(**x,**y)、b={**x,**y}并分析输出结果第2章数据类型与数据对象基础2.6.2字典的基本操作2.6字典类型与对象运算名称说明举例比较运算字典之间的比较运算只支持"=="和"!="运算。用于判断二个字典的元素是否完全相同。a={'A':90,'B':87}、b={'B':87,'A':90},则a==b的值为True。但id(a)与id(b)的值是不同的。逻辑运算字典可与其他对象进行逻辑运算。这时空字典的逻辑值为False,非空字典的逻辑值为True。a={'A':90,'B':87},则3ora的值为3;aand[1,2]的值为[1,2]成员运算可以使用in和notin运算符判断数据对象是否为字典的键a={'A':90,'B':87},则'A'ina的值为True,'A'notina的值为False身份运算可以使用is和notis运算符判断二个对象是否为同一对象。a=b={'A':90,'B':87},则aisb的值为True,anotisb的值为False1.字典运算第2章数据类型与数据对象基础2.6.2字典的基本操作2.6字典类型与对象字典不支持索引和切片,但可以通过“字典名[键名]”的方式由键名得到对应的键值。2.根据键查询键值d={'A':20,'B':19,'C':18},则d["A"]的值为20。【例2.23】使用字典保存成绩,根据学号查询成绩datas={"2401":89,"2409":76,"2411":92,"2435":65}xh=input("输入要查询成绩的学号:")print(datas[xh])3.添加元素与键值修改利用“字典名[键名]”不仅可以根据键快速查询键值,还可以用来添加元素或修改键值语法格式:字典名[键名]=键值【例2.24】添加元素或修改键值datas={"2401":89,"2409":76,"2411":92,"2435":65}datas["2411"]=95#键存在,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋季常见传染病预防知识
- 2026年电梯销售绩效考核方案
- 2026年知识图谱构建面试题
- 2026年家居设计助理面试
- 儿童康复护理中的康复工程应用
- 2026年近视防治科普知识讲座
- 护理不良事件质量改进
- 护理沟通技巧提升汇报
- 2026年幼儿园防汛防台风安全知识教育
- 2026年教师资格证综合素质历年仿真题与模拟题解析
- 2025年苏州市社区工作者招聘考试笔试试题及答案解析
- 2026年中考生物常考知识点精简版
- 《挡土墙技术状况评定规范》
- 医疗器械借用合同范例
- 2024年粮油仓储管理员理论知识竞赛理论考试题库500题(含答案)
- 茶艺知到智慧树章节测试课后答案2024年秋山东管理学院
- 内镜中心职业防护护理课件
- 体育中国学习通超星期末考试答案章节答案2024年
- DL∕T 5285-2018 输变电工程架空导线(800mm以下)及地线液压压接工艺规程
- 《祝福》教学设计 统编版高中语文必修下册
- 装配式建筑装饰装修技术 课件 模块六 集成厨房
评论
0/150
提交评论