1、2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算of5612.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.1 核心内置数据类型概述第二章 数据类型of312Python的数据类型分为数值类型(数值类型包括整型、浮点型等)、序列类型(列表、元组,包括字符串,字符串本质上也是一个序列类型)、集合类型、字典(是一个比较特殊的叫做映射类型)以及其它类型。Python提供了一个特定的内置函数type()来检查一个对象的类型,它返回的是一个叫做类型对象的特殊类型,可以把它归类到其它的类型里边。2.1 核心内置数据类型概述第二章 数据类型of3131类型检
2、测函数type()使用type()函数快速检查某一个变量或常量的类型,以便确定它们所能进行操作的种类。type(8)说明“8”是属于“int”类型的。但目前并没有把它放到变量里边。其中“”就是一个类型对象,是用来描述数据类型的一个类型对象。type(3.14)检测的结果表明,小数“3.14”的类型是“float”类型,是浮点类型。当然也可以检测变量的类型,例如:name=Tom type(name)2.1 核心内置数据类型概述第二章 数据类型of3142空对象(None)Python中还有一个特殊的类型称之为空对象。空对象(None):表示一个特殊的常量,表示什么都没有。3布尔类型(bool)
3、的本质Python中的布尔类型,表示事物的两种状态,真(True)或者假(False),通常它是用来测试一个结果是“真”或“假”。看下面的实例:5 35 type(5 3”或者“5 3”创建一个对象,“5 3”这个对象是有类型的,可以用type()函数测试所创建的这个对象的类型。2.1 核心内置数据类型概述第二章 数据类型of315bool类型中的True和False对应着int类型中的1和0。Python里布尔型既有两个独立的常量“True、False“,另外它和int型的1和0 又有着千丝万缕的关系。True=1False=0以上实例说明bool型的True的本质和int型的1是一致的,F
4、alse和0一致。2.1 核心内置数据类型概述第二章 数据类型of316True=1True=3False=0False=-3上结果表明bool型的True和False只和int型的1和0对应。2.1 核心内置数据类型概述第二章 数据类型of317可以直接把bool型的True和Fals当作一个1或者0来使用:x=3+Trueprint(x)y=4+Falseprint(y)2.1 核心内置数据类型概述第二章 数据类型of318另外,布尔型也有一个内置函数“bool”,它可以将某个值转换成布尔型的结果。bool(obj):将对象“obj”转换成布尔型。bool(1)bool(0)bool(4)
5、bool(-5)注意:本质上“True”等同于1,“False”等同于0,但转换时就不限于1和0了。转换的原则是:把各种不同类型的特殊数据当作“False”来处理,非特殊数据当作“True”来处理。2.1 核心内置数据类型概述第二章 数据类型of319bool(abc)bool()#空字符串前面介绍了一个特殊的对象“None”,空对象,空对象是什么都没有,也当作“False”来处理。bool(None)各种数据类型的特殊值:数值0、0.0、空字符串、空列表、空元组()、空字典、空集合set()等也都当作“False”。2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算
6、of56102.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.2 数据类型申明及基本运算第二章 数据类型of31112.2.1 整型整数类型共有4种进制表示:十进制、二进制、八进制、十六进制。(1)十进制整数。为默认情况,由0-9的数字组成,如12,23。(3)八进制整数。由0-7的数字组成,在Python中表示该数为八进制时需在数字前面加0o或0O(第1个是数字0,第2个是字母o,大写或者小写均可。以下均相同),如0o1,0O11等。(2)十六进制整数。由0-9的数字、a-f的字母组成,在Python中表示该数为十六进制时需在数字前面加0 x或0X,如0 xbb,0 x
7、3d等。(4)二进制整数。由0-1的数字组成,在Python中表示该数为二进制时需在数字前面加0b或0B,如0b0,0b10等。第二章 数据类型of31122.2.2 浮点数类型2.2 数据类型申明及基本运算Python中的浮点数有2种表示形式:十进制表示和科学计数法表示。十进制表示法与数学中的实数表示法一致。如:.1、1.1、0.1、1.0等都是合法的表示方法。1.1*10-2的科学计数法为1.1e-2或1.1E-2,e或E表示以10为底,后跟10的幂次方,其值为0.011。第二章 数据类型of31132.2.3 复数类型2.2 数据类型申明及基本运算Python中的复数类型表示数学中的复数
8、。复数分为实部和虚部,其中虚部通过j或J来表示。如:12.5+5j或者12.5+5J。复数的实部和虚部都是浮点类型。对于复数z,可以用z.real和z.imag来分别获得它的实数部分和虚数部分。例:z=3.4+5.2Jtype(z)z.real z.imag第二章 数据类型of31142.2.4 数字运算符2.2 数据类型申明及基本运算变量被赋值为数字类型后,可以进行数学中的加减乘除等各种运算。Python提供大部分常用的算术运算符,如加、减、乘、除等等。表2-1给出了常见的算术运算符。表2-1 常用算术运算符运算符描述+加法。对符号左右两个数进行加法运算-减法。对符号左右两个数进行减法运算*
9、乘法。对符号左右两个数进行乘法运算/除法。对符号左右两个数进行除法运算%取模。取符号左边数除以右边数的余数,注意:是整除后的余数*幂。符号左边为底数,右边为指数进行幂运算/取整。取符号左边数除以右边数的整数部分第二章 数据类型of31152.2.4 数字运算符2.2 数据类型申明及基本运算运算符运算的结果可能会改变数字类型,3种数字类型之间存在一种逐渐扩展的关系,具体如下:整数浮点数复数例如:5+3.0/35/3 4.52+(3.15+2.36j)第二章 数据类型of31162.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算 1内置的数字运算函数Python提供了一些内置
10、函数来完成特定的操作,与数字类型相关的内置函数见表2-2所示。表2-2 内置的数字运算函数函数描述abs(x)绝对值函数。返回x的绝对值divmod(x,y)商余函数。返回元组类型数据(x/y,x%y)pow(x,y,z)幂次方函数。如果省略第三参数,则返回x*y,否则,返回(x*y)%zround(x,n)四舍五入函数。对x进行四舍五入,保留n为小数max(x1,x2,.,xn)最大值函数。返回给定参数中值最大者min(x1,x2,.,xn)最小值函数。返回给定参数中值最小者第二章 数据类型of31172.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算math库是Pyt
11、hon内置的标准库,导入math库的3种方法:(1)import math采用这种形式导入math库后,对math库中函数的调用方式为:math.()。import math math.ceil(3.15)2math库第二章 数据类型of31182.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算(2)import math as math库中函数的调用方式为:math.()。import math as mtmt.floor(3.15)(3)from math import*math库中函数的调用方式为:()。from math import*floor(3.15)在ma
12、th库中有很多写好的函数或者称之为方法,可以用它来执行一些常见操作。第二章 数据类型of31192.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算math库包括数学常数(表2-3)、数值函数(表2-4)、幂对数函数(表2-5)等,更多内容请查阅相关文献。函数描述math.pi圆周率。值为3.141592653589793math.e自然对数。值为2.718281828459045math.inf正无穷大,负无穷大为-math.infmath.nan非浮点数标记,NaN(Not a Number)表2-3 math库的数学常数第二章 数据类型of31202.2.5 数字类型
13、的常用函数及math库2.2 数据类型申明及基本运算函数描述math.fab(x)绝对值函数。返回x的绝对值math.fmod(x,y)模函数。返回x与y的模,即余数math.ceil(x)向上取整函数。返回不小于x的最小整数math.floor(x)向下取整函数。返回不大于x的最大整数math.trunc(x)取整函数。返回x的整数部分math.gcd(x,y)最大公约数函数。返回x与y的最大公约数表2-4 math库的数值函数第二章 数据类型of31212.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算表2-5 math库的幂对函数函数描述math.pow(x,y)返
14、回x 的y次幂math.exp(x)返回e的x次幂,e是自然对数math.expml(x)返回e的x次幂减1math.log(x,base)非浮点数标记,NaN(Not a Number)math.log1p(x)返回x的对数,只输入x时,返回自然对数,即lnxmath.log2(x)返回1+x的自然对数math.log10(x)返回x的2对数值math.log(x,base)返回x的10对数值第二章 数据类型of31222.2.5 数字类型的常用函数及math库2.2 数据类型申明及基本运算函数描述int(x)将x转换为整数,x可以是浮点数或字符串float(x)将x转换为浮点数,x可以是整
15、数或字符串complex(re,im)生成一个复数,实部为re,虚部为im,re可以使整数、浮点数或字符串,im可以是整数或浮点数,但不能为字符串表2-6 内置的数字转换函数Python中有关数值类型转换的函数见表2-6.第二章 数据类型of31232.2.6 数字类型的常用函数及math库2.2 数据类型申明及基本运算Python是一个强类型的语言,类型很重要,两个不同类型的数据相加的时候,需要转换其中的一个类型,比如将带引号的3变成一个真正的十进制的整型数字,可以写成:5+int(3)转换的工作交给一个内置函数“int”来完成,内置函数就是Python中已经内置好的,不需要额外的引入一些对
16、象或者是模块或者是包就可以使用的函数。Python中有关数值类型转换的函数见下表.函数描述int(x)将x转换为整数,x可以是浮点数或字符串float(x)将x转换为浮点数,x可以是整数或字符串complex(re,im)生成一个复数,实部为re,虚部为im,re可以使整数、浮点数或字符串,im可以是整数或浮点数,但不能为字符串第二章 数据类型of31242.2.6 数字类型的常用函数及math库2.2 数据类型申明及基本运算5+int(1011,2)#参数2表示前面的数值是一个二进制数之前在申明的时候是通过加一个前缀来区别数的进制,现在转换的时候可以再加一个参数来告诉系统,前面这个字符串的值
17、它是基于二进制的。以此类推,我们也可以转换八进制或者十六进制数。int(177,8)#参数8表示前面的数值是一个八进制数 int(9ff,16)#参数16表示前面的数值是一个十六进制数第二章 数据类型of31252.2.6 数字类型的常用函数及math库2.2 数据类型申明及基本运算有关complex()函数的实例:complex(3.14)complex(3.14,5.2)a=3.14 b=5.12 complex(a,b)第二章 数据类型of31262.2.7 浮点型精度处理2.2 数据类型申明及基本运算下面是一个有关浮点型数字计算的简单表达式。0.1+0.1+0.1-0.3尽管结果非常接
18、近于0,但它不是0。这在精度要求非常高的金融或者财务领域是不能容忍的,因为一点点误差都不能有。造成这个问题的的本质原因在于,计算机内部的二进制存储机制本身就没办法存储某些特定的数值,但是在精度要求非常高的科学计算或者是金融财务领域,又不允许出现丝毫的误差,那该如何解决这个问题呢?第二章 数据类型of31272.2.7 浮点型精度处理2.2 数据类型申明及基本运算Python提供了一个专门的模块“decimal”来解决有关浮点数的精度问题。通过“decimal”模块下的类“Decimal”(注意第一个字母大写),提供了一种精度更高的处理浮点型数字的机制。import decimal#导入模块de
19、cimaldecimal.Decimal(0.1)+decimal.Decimal(0.1)+decimal.Decimal(0.1)-decimal.Decimal(0.3)#调用decimal模块的类Decimal来处理浮点型数字注意:这里是将字符串0.1作为参数传递给decimal 模块的“Decimal类的构造函数,实际使用时经常会犯错,漏掉了0.1两边的引号。第二章 数据类型of31282.2.7 浮点型精度处理2.2 数据类型申明及基本运算 import decimal x=decimal.Decimal(0.1)+decimal.Decimal(0.1)+decimal.Deci
20、mal(0.1)-decimal.Decimal(0.3)type(x)print(x)z=str(x)type(z)print(z)第二章 数据类型of31292.2.7 浮点型精度处理2.2 数据类型申明及基本运算“import decimal”导入模块的方式,在使用“decimal”模块的每一个类时都要带上前缀“decimal.”,这种方式有点繁琐,可以如下方式来导入,从而可以有一种简化的表示方式:from decimal import Decimal x=Decimal(0.1)+Decimal(0.3)print(x)其中from decimal import decimal表示从“
21、decimal”模块导入“Decimal”这个类。其语法为:from 模块名 import 模块里的类第二章 数据类型of31302.2.7 浮点型精度处理2.2 数据类型申明及基本运算注意:浮点型的存储是有缺陷的,所以在精度要求更高的场合,可以使用“decimal”模块的“Decimal”类来实现。但要注意:使用“decimal”模块的“Decimal”类传参数时一定是以字符串的形式进行传参。否则,如果直接传一个浮点型,它不会报错,但得不到我们想要的结果。Decimal(0.1)+Decimal(0.3)Decimal(0.1)+Decimal(0.1)+Decimal(0.1)-Decim
22、al(0.3)2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算of56312.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.3 列表第二章 数据类型of31322.3.1 列表基本特征序列描述了数据类型的一种形态,具体的数据类型有很多,包括列表、元组、字符串,这些都属于序列类型。从它的特性上来讲可以分为两类,一类是可变序列,一类是不可变序列。可变序列:指的是序列中的某个元素支持在原位置被改变。不可变序列:是不允许在原位值改变某个元素或者对象的值。列表可以说是Python语言中使用频率最高的一个有序序列(这里的有序指的是先后顺序而不是大小顺序!)
23、。第二章 数据类型of31332.3.1 列表基本特征2.3 列表1.列表的定义列表(list):是可以包含任意对象的有序集合(可以包含类型统一的整数,也可以包含不同类型的如串、元组、字典、自己定义的类的实例等等,并且它是有序的,顺序是可以自定义的)。2.列表的申明列表用一对中括号来申明,中括号里写上多个元素,中间以逗号隔开,逗号是默认的分隔符,这些元素可以是任意类型的数据。第二章 数据类型of31342.3.1 列表基本特征2.3 列表score=80#定义一个变量来表示一个学生一门课程的成绩scores=80,90,88,90.3#定义一个列表来表示一个学生多门课程的成绩type(scor
24、es)#列表的类型是“list”print(scores)第二章 数据类型of31352.3.1 列表基本特征2.3 列表3.列表(list)的特性列表具有以下特性:(1)可以包含任意对象的有序集合。如:x=89,90.3,tom(2)可以通过下标索引来访问list中的某个元素。下标索引从左边开始总是从0开始,也可以从右边开始,那就是从-1开始。图2-1 序列类型的索引体系第二章 数据类型of31362.3.1 列表基本特征2.3 列表(3)可变长度,异质,任意嵌套(可任意增减、可包含任意类型的元素,可任意嵌套指的是列表的元素又可以是一个列表)。(4)支持原位改变。x=188,90.3,Tom
25、,56,89,89print(x)x0=77xx3#元素x3是一个列表 x30第二章 数据类型of31372.3.1 列表基本特征2.3 列表4.列表转换函数list()通过列表转换函数list()可以将某个特定的可迭代序列转换为列表。ls=list(range(1,6)#将序列转换为列表ls lt=list(python)lt第二章 数据类型of31382.3.2 序列通用操作2.3 列表1.列表的初始化列表用中括号将若干元素括起来,中间用逗号分隔。ls=1,2,32.序列的通用操作以list为例序列的通用操作包括判断元素是否在序列之内、序列连接、重复序列元素等。第二章 数据类型of3139
26、2.3.2 序列通用操作2.3 列表函数描述x in ls如果x是ls的元素,则返回True,否则返回Falsex not in ls如果x不是ls的元素,则返回True,否则返回Falsels+lt连接序列ls和lt,“+”连接操作不会改变两个操作对象ls和lt本身的值ls*n或 n*ls将序列ls中的元素重复n次形成一个新的序列,原序列ls并没有改变lsi通过下标索引的方式来获取序列元素lsilsi:j获取i,j-1范围的元素。ls:j获取0,j-1范围的元素;lsi:获取从i开始的所有元素;ls:获取所有的元素。注意:获取列表元素的值时,下标不能越界!lsi:j:k 按一定的步长来访问指
27、定索引范围,其中i、j分别是起始、终止位置,k是步长len(ls)获取序列长度,即序列中元素个数min(ls)获取序列最小值,但要求序列ls中的元素必须是可以比较大小的max(ls)获取序列最大值,但要求序列ls中的元素必须是可以比较大小的sum(ls)统计序列元素的总和,如果元素中有非数值类型的数据,则不能求和!ls.index(x,i,j)返回元素x在序列ls中i,j-1范围内第一次出现的下标索引位置,如果不在序列中则出错ls.count(x)统计元素x出现在序列s中的次数第二章 数据类型of31402.3.2 序列通用操作2.3 列表两点说明:(1)切片操作 x=1,2,3,4,5,6x
28、2:5:2x:2 x:-1#得到置逆的结果,但注意:x的值并未改变!x x-5:-1:2第二章 数据类型of31412.3.2 序列通用操作2.3 列表 names=Tom,Peter,Jerry,Mike names0:2 names0:4 names4注意:获取列表元素的值时,下标不能越界!第二章 数据类型of31422.3.2 序列通用操作2.3 列表下标索引的使用也可以从后往前即从-1开始,但当有两个下标索引时,同样最后一个索引对象的值不包含在内。如下:names=Tom,Peter,Jerry,Mike names-1 names-4:-1 names-4:#省略第2下标,截取到后面
29、所有的,但请注意,这里是从右往左进行截取第二章 数据类型of31432.3.2 序列通用操作2.3 列表(3)求和操作sum(ls)x=1,7,3,0,3,9 sum(x)ls=1,4,9,Tom,4,7,5#元素有非数值类型的数据,不能求和!sum(ls)第二章 数据类型of31442.3.2 序列通用操作2.3 列表 ts=Tom,Peter#元素是字符串,不能求和!sum(ts)第二章 数据类型of31452.3.3 可变序列及列表通用操作(一)2.3 列表前面以list列表为例所介绍的通用操作,既可以使用在列表上,列表是一可变序列,但这些操作它同样适用于不可变序列。下面将继续以list
30、为例,来介绍可变序列的通用操作。这些操作既可以作用到list列表上,也可以作用到其它可变序列的数据结构上。下表列出了可变序列及列表的通用操作。第二章 数据类型of31462.3.3 可变序列及列表通用操作(一)2.3 列表函数描述lsi=x原位修改。修改ls中指定下标索引对应元素的值为xlsi:j=lt用可迭代序列lt中的元素替换ls中i,j-1范围内的元素。lt中元素个数可以多于也可以少于ls中要被替换掉的元素个数,此时原列表的长度会发生变化lsi:j:k=lt用可迭代序列lt中的元素替换ls中i,j-1范围内的元素。注意:这里要求lt的大小和ls中被置换的元素个数要保持一致。lsi:j=l
31、t 和 lsi:j:k=lt的操作是有差异的!del lsi删除列表ls中指定的元素del lsi:j删除列表ls中i,j-1范围的元素,等价于 lsi:j=del lsi:j:k 按步长k来删除列表ls中i,j-1范围的元素ls+=lt或 ls.extend(lt)将可迭代序列lt中的元素逐个追加到列表ls的末尾处ls*=n更新列表ls,将列表ls中的元素重复n次ls.remove(x)移除列表中指定的元素,当列表中有多个值相同的元素时,remove方法删除的是值相同的第1个元素。必须指明要移除的元素,该方法无返回值ls.clear()清空列表,即删除列表中所有的元素。实施该操作后,列表ls
32、为空,等价于ls=ls.append(x)在列表ls末尾追加一个元素x。说明:x作为一个对象进行追加。一次只能追加一个元素,那怕x是一个列表,也只能作为一个整体进行追加。ls.insert(i,x)在指定下标位置处插入元素x第二章 数据类型of31472.3.3 可变序列及列表通用操作(一)2.3 列表 s=99,2,3,4,5,6,7,8,9,10 s:3=100#原本希望将列表s的前三个元素替换成100,但这种使用方法是错误的!s:3=98,97,96#用一个新的列表替换列表s中的前三个元素 ss:3=100是不被允许的。因为这里有歧义,究竟是希望把前三个值删掉,然后插入一个100呢?还是
33、要把前三个值每个都换成100?不能确定,因此,系统拒绝这样的操作。第二章 数据类型of31482.3.3 可变序列及列表通用操作(一)2.3 列表 l=1,2,3,4,5,6,7,8,9,10 l:2=99#要求右边必须是可迭代序列,因此会报错 l:2=99#试图指定一个大小为1的序列,但要求的大小必须为5 l:2=99,99,99,99,99 l第二章 数据类型of31492.3.4 可变序列及列表通用操作(二)2.3 列表函数描述ls.pop(i)pop()操作有返回值。检索并删除特定元素,pop操作会弹出一个值并删除该值。省略i,返回并删除最后一个元素值ls.reverse()反转序列。
34、反转操作只影响序列ls自己,它并不返回新值ls.copy()复制序列。复制序列将产生一个真实的拷贝 说明:复制序列.copy()是一个非常重要的操作。第二章 数据类型of31502.3.4 可变序列及列表通用操作(二)2.3 列表将一个列表赋值给另一个列表不会产生新的列表对象。例如:l=0,1,2,3,4,5,6,7,8,9,10 s=l#将序列l复制给s s0=-99#改变序列s中元素的值 s l#发现原序列l中对应元素的值也被修改了以上操作表明s和l它们两个关联的是同一个对象,这其实就是共享引用。s is l说明:全局函数id()也能检测两个对象是否是共享引用。第二章 数据类型of3151
35、2.3.4 可变序列及列表通用操作(二)2.3 列表解决产生新的列表的两种方法:方法一:利用切片操作取出列表的所有元素赋值给新的变量。l=0,1,2,3,4,5,6,7,8,9,10 s=l:#把l的所有值取出来赋值给s s s0=-99 s l第二章 数据类型of31522.3.4 可变序列及列表通用操作(二)2.3 列表方法二:利用列表的方法“copy()”拷贝列表的所有元素到新的变量。l=0,1,2,3,4,5,6,7,8,9,10 x=l.copy()x x-1=101 xl注意:关于这一点很容易出错,请一定弄清楚。正确理解第二章讲到的赋值逻辑。第二章 数据类型of31532.3.4
36、可变序列及列表通用操作(二)2.3 列表列表所特有的一个操作“.sort()”方法。函数描述ls.sort(reverse=False)排序操作。默认按照从小到大进行排序,但设置reverse=True得到降序排列sorted(ls)全局排序函数。默认返回升序,但并不改变原序列ls第二章 数据类型of31542.3.4 可变序列及列表通用操作(二)2.3 列表几点说明:(1)要求序列中的元素必须具有相同的类型ls=1,3,gh,66,8,9 ls.sort()#必须是相同类型的数据才能进行排序 sorted(ls)#要求序列中的元素具有相同的数据类型才能排序若一个列表含有数值、字符串等混合类型
37、,则不能进行排序操作。第二章 数据类型of31552.3.4 可变序列及列表通用操作(二)2.3 列表(2)方法“sort()”和全局函数“sorted()”的区别 lst=11,3,18,9 lst.sort()#没有结果返回,但对lst进行了排序 lst lst=11,3,18,9 sorted(lst)#全局函数,有结果返回,但请注意:lst本身没有被改变!lst“sort()”方法没有结果返回,只是改变原序列的排列顺序。sorted()是全局函数,有结果返回!但原序列本身未改变!同时,全局函数不依附于任何的对象,因此,必须把序列以参数的形式传递给它。第二章 数据类型of31562.3.
38、4 可变序列及列表通用操作(二)2.3 列表(3)方法“sort()”和全局函数sorted()的使用示例 people=Mike,Tom,John,Peter,Jerry sorted(people,key=lambda n:n1)#按第二个字母进行排序 people=Mike,Tom,John,Peter,Jerry people.sort(key=lambda x:x0)people2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算of56572.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.4 元组第二章 数据类型of3158Python
39、中另外一个比较常用的数据结构叫做“元组”,又称之为“tuple”,它是属于序列里面的不可变序列。1.tuple元组的基本特性tuple是序列中的不可变序列,tuple元组是“可以包含任意对象的有序集合”。元组具有以下特性:(1)tuple元组是包含任意对象的有序集合。(2)通过下标索引(位置偏移)访问元素。(3)固定长度(list是可变长度)、异质、可任意嵌套。(4)对象引用数组。2.4 元组第二章 数据类型of31592.元组的申明元组tuple可以使用一个圆括号来进行申明。(1)空元组的申明 tp=()#空元组 type(tp)tp2.4 元组第二章 数据类型of3160(3)申明元组时可
40、以省略小括号(但不建议这样做)t2=1,2,3#省略申明元组时的小括号,但不建议这样使用 t2 type(t2)(4)申明元组的同时将其元素赋值给相应的变量 x,y=(3,4)x y强调:对只含一个元素的元组进行申明时,末尾的“,”不能省略!2.4 元组第二章 数据类型of31613.元组转换函数tuple()可以将某个特定的可迭代序列转换为元组。假定有函数“range()”生成了一个序列,可以通过转换函数“tuple()”将它转换为一个元组。tp=tuple(range(1,6)#将序列转换为元组 tp“range(1,6)”产生的是一个可迭代的序列,其值是:1,2,3,4,5,注意不包含值
41、6。2.4 元组第二章 数据类型of31624.元组的常用操作 对元组元素的访问操作,仍然是通过下标索引来进行访问。也可以进行一定范围的访问,即通过范围进行访问。由于元组也是序列类型,因此,元组支持序列类型的通用操作,如判断元素是否在序列之内、连接序列、重复序列元素、下标获取元素、访问指定索引范围、按步长访问指定索引范围、获取序列长度、获取最小值、获取最大值、求和(必须是数值型数据)等都可以用在元组上。但不支持可变序列及列表的通用操作,因为它有不可变的特性,即元组不支持原位改变,也不支持扩展操作。如:tp=(1,2,3,4,5)tp0=992.4 元组第二章 数据类型of3163但以下操作是允
42、许的:tp2 tp20=99 tp这里,由于元组元素tp2是一个列表,因此,可以对其进行修改,但如果元素又是一个元组,则仍然不允许修改。相对于列表而言,元组少了很多操作。在实际开发过程中,如果我们确定不需要原位改变的这种情况用元组就比用列表更合适,能一定程度的保证数据的安全。2.4 元组第二章 数据类型of31645.使用tuple的好处tuple比list操作速度快,利用元组存储数据,可以对不需要修改的数据进行“写保护”,使得代码更安全。下面是 tuple转换成list的代码实例。x_tuple=(1,2,3)y_list=list(x_tuple)#元组到列表的转换 print(y_lis
43、t)type(y_list)2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算of56652.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.5 range第二章 数据类型of31661.range的本质range()是Python的一个内置函数,也是Python中的另外一个不可变序列。调用range()函数,可以生成一个数值序列。尽管它是一个一般的函数,但它也是有类型的,它的类型是“range”。比如我们想在屏幕上打印5次“Hello world!”,代码如下:for i in range(5):print(Hello world!)range(
44、5)生成一个包含5个元素的序列,这5个元素是从0到4,注意不包含5。2.5 range第二章 数据类型of3167如果要使用遍历过程中变量i的值,可以这样使用:for i in range(5):#通过str函数将数值类型数据转换成字符型,然后进行“+”连接操作 print(Hello world +str(i)+!)#通过str()将数值类型数据转换成字符型2.5 range第二章 数据类型of3168 r=range(5)#得到04的元素构成的序列,不包含元素5 rtype(r)range函数的结果虽然不像list和tuple那么直观,但仍然可以检测它的类型,它是“range”类型的,“r
45、ange”类型属于序列的不可变类型。与list和tuple一样,可以通过它的下标来访问它的元素的值,但它不支持原位改变。r0#可以访问它的元素 r-1 r0=99#不能改变它的值,它不支持原位改变2.5 range第二章 数据类型of31692.range的申明“range”的申明有三种方式。请见表2-11。函数描述range(j)得到0,j-1范围的整数序列,不包含整数jrange(i,j)得到i,j-1范围的整数序列,不包含整数jrange(i,j,k)按步长k递增得到i,j-1范围的整数序列,不包含整数j2.5 range第二章 数据类型of3170 r=range(1,20,3)#第三
46、个参数表示步长值 r for i in r:print(i)“range(1,10,3)”得到的是1到9的3个值。即从1开始,按步长3递增,直到10,但不包括10。2.5 range第二章 数据类型of31713.range支持序列的通用操作range()比较简单,它不支持像列表一样的原位操作,但序列的通用操作都适用于它,如判断元素是否在序列之内、求最大最小值、求长度、检索某一个元素的位置,统计元素出现的次数等等。2.2数据类型申明及基本运算2.3列表2.4元组2.7字典习题2.6哈希运算of56722.8字符串第二章数据类型2.5range2.1核心内置数据类型概述2.6 哈希运算第二章 数
47、据类型of3173前面介绍了可变序列类型列表和不可变序列类型元组以及range范围,后面还会学习到更多的可变类型和不可变类型。Python界定一个数据类型是否可变主要是通过考察该类型数据是否能够进行哈希运算。能够进行哈希运算的类型认为是固定类型,否则认为是可变类型。哈希运算可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是对数据的一种有损且紧凑的表示形式。Python提供了一个内置的哈希运算函数hash(),它可以对固定数据类型产生一个哈希值。2.6 哈希运算第二章 数据类型of3174 hash(python)hash(1,2,3,ok)hash(1
48、,2,3)hash(1,2,ok,4,5)说明:每次启动idle调用hash()函数即使对同一个数据进行哈希运算,哈希的结果也可能不同。2.2数据类型申明及基本运算2.3列表2.4tuple元组2.7字典习题2.6哈希运算of56752.8字符串第二章数据类型2.5range范围2.1核心内置数据类型概述第二章 数据类型of31762.7.1 字典概述及声明2.7 字典字典,属于核心数据类型-映射。字典可以说是在Python中除了list列表之外使用频率最高的一个数据类型。字典(dictionary)是由键值对(key:value)构成的集合,它的应用场景非常广泛。当我们要保存一对一对的信息,
49、如要将一个键和一个对应值添加到一个大的数据结构里面,在这种情况下就非常适合使用字典。例如我们想建立一个电话号码本,人名就可以当做是一个键(key),每一个电话号码就可以是这个键(人名)所对应的值(value)。第二章 数据类型of31772.7.1 字典概述及声明2.7 字典1.字典的特性(1)通过健(key)而非下标索引(位置偏移)访问数据字典的数据访问不是通过下标索引,而是通过它的键来访问,这里的键叫做“key”,它所存储的值叫做“value”,所以说它的存储结构基本上就是一个键一个值,就是平时我们所说的键值对。(2)可包含任意对象的无序集合在默认的字典表里,它里边的元素是无序的,创建字典
50、时的顺序和呈现时的顺序可能会不一样。dt=name:Tom,number:201505160021,age:20 dt第二章 数据类型of31782.7.1 字典概述及声明2.7 字典(3)可变长度、异质、可以任意嵌套(4)属于可变映射分类在映射里,字典属于可变映射分类。(5)对象引用表(Hash Table)字典的存储本质是一个对象引用的表,它的存储机制就是平时所说的哈希表。第二章 数据类型of31792.7.1 字典概述及声明2.7 字典2.创建字典的方法Python中的字典用大括号表示,注意每个项目的键和对应值之间用冒号分隔,冒号“:”左边是键,右边是对应值;每个项目之间用“,”分隔。在
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。