文章目录
第六章 组合数据类型
6.1 组合数据类型的基本概念
能够表示多个数据量的类型成为组合数据类型。Python语言中最常用的组合数据类型有3大类,分别是集合类型、序列类型和映射类型。
集合类型是一个具体的数据类型名称,而序列类型和映射类型是一类数据类型的总称。
集合类型是一个元素的集合,元素之间无序,相同元素在集合中唯一存在。
序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。序列类型的典型代表是字符串类型和列表类型。
映射类型是“键—值”数据项的组合,每个元素是一个键值对,表示为(key,value)。映射类型的典型代表是字典类型。
6.1.1 集合类型概述
Python语言中的集合类型与数学中的集合概念一致,既包含0个或多个数据项的无序组合。集合是无序组合,用大括号({})表示,它没有索引和位置的概念,集合中元素可以动态增加或删除。
集合元素不可重复出现,元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。
需要注意,由于集合元素是无序的,集合的打印效果与定义顺序可以不一致。由于集合元素独一无二,使用集合类型能够过滤重复元素。
集合类型有4个操作符:交集(&)、并集(|)、差集(-)、补集(^),操作逻辑与数学定义相同。
操作符的运算 | 描述 |
---|---|
S - T | 返回一个新集合,包括在集合S中但不在集合T中的元素 |
S & T | 返回一个新集合,包括同时在集合S和T中的元素 |
S ^ T | 返回一个新集合,包括集合S和T中非共同元素 |
S | T | 返回一个新集合,包括结婚S和T中所有元素 |
集合类型主要用于元素去重,适合于任何组合数据类型。集合类型常用的操作函数或方法:
函数或方法 | 描述 |
---|---|
S.add(x) | 如果数据项x不在集合S中,将x增加到s |
S.remove(x) | 如果x在集合S中,移除该元素,不再产生KeyError异常 |
S.clear() | 移除S中所有数据项 |
len(S) | 返回集合S元素个数 |
x in S | 如果x是S的元素,返回True,否则返回False |
x not in S | 如果x不是S的元素,返回True,否则返回False |
6.1.2 序列类型概述
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。
由于元素之间存在顺序关系,所以序列中可以存在相同数值但位置不同的元素。Python语言中有很多数据类型都是序列类型,其中比较重要的是:字符串类型、列表类型和元组类型。
字符串类型可以看成是单一字符的有序组合,属于序列类型。列表则是一个可以使用多种类型元素的序列类型。序列类型使用相同的索引体系,即正向递增序号和反向递减序号。
序列类型的操作符和函数:
操作符 | 描述 |
---|---|
x in S | 如果x是S的元素,返回True,否则返回False |
x not in S | 如果x不是S的元素,返回True,否则返回False |
s + t | 连接s和t |
s * n 或 n * s | 将序列s复制n次 |
s[i] | 索引,返回序列的第i个元素 |
s[i: j] | 切片,返回包含序列s第i到j个元素的子序列(不包含第j个元素) |
s[i: j:k] | 步骤切片,返回包含序列s第i到j个元素以k为步数的子序列 |
len(s) | 序列s的元素个数(长度) |
min(s) | 序列s中的最小元素 |
max(s) | 序列s中的最大元素 |
s.index(x) | 序列s中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
6.1.3 映射类型概述
映射类型“键—值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对(key,value)是一种二元关系,源于属性和值的映射关系。
映射类型是序列类型的一种扩展。在序列类型中,采用从0开始的正向递增序号进行具体元素值的索引。而映射类型则由用户来定义序号,即键,用其去索引具体的值。
键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
6.2 列表类型
6.2.1 列表的定义
列表是包含0个或多个元素的有序序列,属于序列类型。列表可以进行元素增加、删除、替换和查找等操作。列表没有长度限制,元素类型可以不同,不需要预定义长度。
列表类型用括号({})表示,也可以通过list(x)函数将集合或字符串转换成列表类型。
列表属于序列类型,所以列表类型支持序列类型对应的操作。
6.2.2 列表的索引
索引是列表的基本操作,用于获得列表的一个元素。使用中括号作为索引操作符。
可以使用遍历循环对列表类型的元素进行遍历操作,语法格式如下:
for <循环变量> in <列表变量>:
<语句块>
6.2.3 列表的切片
切片是列表的基本操作,用于获得列表的一个片段,即获得一个或多个元素。切片后的结果也是列表类型。语法格式如下:
<列表或列表变量>[N:M] 或 <列表或列表变量>[N:M:K]
切片获取列表类型从N到M(不包含M)的元素组成新的列表。其中,N和M为列表类型的索引序号,可以混合使用正向递增序号和反向递减序号,一般要求N小于M,当N大于等于M时,返回空列表。当K存在时,切片获取类表类型从N到M(不包含M)以k为步长所对应元素组成的列表。
6.3 列表类型的操作
6.3.1 列表的操作函数
操作函数 | 描述 |
---|---|
len(ls) | 列表ls的元素个数(长度) |
min(ls) | 列表ls中的最小元素 |
max(ls) | 列表ls中的最大元素 |
list(x) | 将x转变成列表类型 |
6.3.2 列表的操作方法
列表类型存在一些操作方法,语法格式如下:
<列表变量>.<方法名称>(<方法参数>)
方法 | 描述 |
---|---|
ls.append() | 在列表ls最后增加一个元素x |
ls.insert(i,x) | 在列表ls第i位置增加元素x |
ls.clear() | 删除ls中所有元素 |
ls.pop(i) | 将列表ls中第i项元素取出并删除该元素 |
ls.remove(x) | 将列表中出现的第一个元素x删除 |
ls.reverse() | 列表ls中元素反转 |
ls.copy() | 生成一个新列表,复制ls中所有元素 |
del <列表变量>[<索引序号>] del <列表变量>[<索引起始>:<索引结束>] |
对列表元素或片段进行删除 |
6.4 字典类型
6.4.1 字典的定义
“键值对”是组织数据的一种重要方式,广泛应用在Web系统中。键值对的基本思想是将“值”信息关联一个“键”信息,进而通过键信息查找对应值信息,这个过程叫映射。Python语言中通过字典类型实现映射。
Python语言中的字典使用大括号{}建立,每个元素是一个键值对,语法格式如下:
{
<键1>: