整理的文章内容主要来源为高教版《计算机等级考试二级 Python》教程视频讲义,并且更正了原讲义中的错误的地方。
专栏文章索引如下:
考试大纲
第 1 章 程序设计基本方法
第 2 章 Python 语言基本语法元素
第 3 章 基本数据类型
第 4 章 程序的控制结构
第 5 章 函数和代码复用
第 6 章 组合数据类型
第 7 章 文件和数据格式化
第 8 章 Python 计算生态
第 9 章 Python 标准库概览
第 10 章 Python 第三方库使用
第 11 章 Python 第三方库纵览
第 6 章 组合数据类型
1. 组合数据类型的基本概念
计算机不仅能对单个变量表示的数据进行处理,通常情况,计算机更需要对一组数据进行批量处理。这种能够表示多个数据的类型称为组合数据类型。Python 语言中最常用的组合数据类型有 3 大类,分别是集合类型、序列类型和映射类型。
集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。
序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。序列类型的典型代表是字符串类型和列表类型。
映射类型是“键-值“数据项的组合,每个元素是一个键值对,表示为(key, value). 映射类型的典型代表是字典类型。
集合类型是一个具体的数据类型名称,而序列类型和映射类型是一类数据类型的总称。
1.1 集合类型概述
Python 语言中的集合类型与数学中的集合概念一致,即包含 0 个或多个数据项的无序组合。集合是无序组合,用大括号 {} 表示,他没有索引和位置的概念,集合中的元素可以动态增加或删除。
集合中的元素不可重复,元素类型只能是不可变数据类型。例如整数、浮点数、字符串、元组等,相比较而言,列表、字典、和集合类型本身都是可变数据类型,不能作为集合的元素出现。
注意事项:
由于集合元素是无序的,集合的输出顺序与定义顺序可以不一致,此外集合元素间没有顺序,不能比较,不能排序,创建集合直接使用 {}.
由于集合元素独一无二,使用集合类型能够过滤掉重复元素。
s = {1, '2', 3.0}
print(s)
pint()
尽管集合中的元素是不可重复的,但是集合元素在输入时是不受限制的。元素在输入集合后会自动去重。
集合类型的操作符及描述如下表所示:
操作符及运算 | 描述 |
---|---|
S-T | 返回一个新集合,包括在集合S中但不在集合T中的元素 |
S&T | 返回一个新集合,包括同时在集合S和T中的元素 |
S^T | 返回一个新集合,包括集合S和T中非共同元素 |
S|T | 返回一个新集合,包括集合S和T中所有元素 |
上述操作符表达了集合类型的4种基本操作,交集(&)、并集(|)、差集(-)、补集(^), 操作逻辑与数学定义相同。
集合类型常用的操作函数或方法如下:
函数或方法 | 描述 |
---|---|
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 |
set(x) 函数将其它的组合数据类型变成集合类型,返回结果是一个无重复且排序任意的集合,set() 函数也可以生成空集合变量。 |
s = set()
print(s)
其中,set() 表示空集合。集合类型主要用于元素去重,适合任何组合数据类型。
1.2 序列类型概述
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。序列的基本思想和表示方法均来源于数学概念。在数学中,经常给每个序列起一个名字。例如,n 个数的序列 s, 可以表示为:
s = s0,s1,s3=2,…,sn-1
当需要访问序列中某个特定值时,只需要通过下标标出即可。例如,需要找到序号为 2 的元素,即可通过 s[2] 获得。注意,序列的下标从 0 开始编号。
由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素。Python 语言中有很多数据类型都是序列类型,其中比较重要的是字符串类型、列表类型和元组类型。
字符串类型可以看成是单一字符串的有序集合,属于序列类型。列表则是一个可以使用多种类型元素的序列类型。
序列类型各个具体类型使用相同的索引体系,与字符串类型一样,即正向递增序号和反向递减序号。
需要注意,序列类型的正向递增序号从 0 开始。通常来说第 1 个元素,指的是序号为 0 的元素。
序列类型的操作符和函数及描述如下所示:
操作符 | 描述 |
---|---|
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 的总次数 |
元组类型是序列类型的重要组成之一,元组类型在 Python 语言中表示为tuple, 一般以小括号和逗号进行组织。 |
t = (1,2,3)
print(type(t))
元组类型严格遵循序列类型的操作定义,可以使用序列类型的操作符和函数。
元组类型一旦定义就不能修改,在编程中不够灵活。同时,元组类型的所有操作都可以由列表类型实现。因此,一般编程中,如果需要自定义变量,通常以列表类型替代元组类型使用。如果确实编程中不需要修改数据,可以使用元组类型。
for c in (1,2,3):
print(c,end='月')
元组类型主要在 Python 语法相关的场景使用。例如,当函数返回多个值时,多个返回值以元组类型返回,实际上返回一个数据类型。
def f(x):
return x,x+1,x+2
print(f(1))
print(type(f(1)))
1.3 映射类型概述
映射类型是“键—值“数据项的组合,每个元素是一个键值对,即元素是(key, value) 元素之间是无序的。键值对 (key, value) 是一种二元关系,源于属性和值的映射关系。
映射类型是序列类型的一种扩展。在序列类型中,采用从 0 开始的正向递增序号进行具体元素值的索引。而映射类型则由用户来定义序号,即键,用其去索引具体的值。
键 (key) 表示一个属性,也可以理解为一个类别或项目,值 (value) 是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
2. 列表类型
2.1 列表的定义
列表类型是包含 0 个或多个元素的有序序列,属于序列类型。列表可以进行元素的增加、删除、替换、查找等操作。列表没有长度限制,元素类型可以不同,不需要预定长度。
列表类型用中括号 [] 表示,也可以通过 list(x) 函数将集合或字符串类型转换成列表类型。list() 函数可生成空列表。
由于列表属于序列类型,所以列表类型支持序列类型对应的操作。
2.2 列表的索引
索引是列表的基本操作,用于获得列表每一个元素。该操作沿用序列类型的索引方式,即正向递增序号和反向递减序号,使用中括号作为索引操作符,索引序号不能超过列表的元素范围,否则会产生 IndexError 的错误。
可以使用遍历循环对列表类型的元素进行遍历操作。
语法格式:
for 循环变量 in 列表变量:
语句块
lst = [100,'100',[100,'100']]
for i in lst:
print(i*2)
2.3 列表的切片
切片是列表的基本操作,用户获得列表的一个片段,即获得零个或多个元素。切片后的结果也是列表类型。切片有两种使用方式:
- 列表或列表变量[N:M]
- 列表或列表变量[N:M:K]
注意事项:Python 语言在 [] 中表示区间需要使用冒号 (😃. 如切片:表示枚举使用逗号 (.), 如列表。
切片获取列表类型从 N 到 M(不包括 M)的元素组成新的列表,其中,N 和 M 为列表类型的索引序号,可以混合使用正向递增序号和递减序号,一般要求 N 小于 M. 当 N 大于等于 M 时,返回空列表。当 K 不存在时,切片获取列表类型从 N 到 M(不包含 M)以 K 为步长所对应元素组成的列表。
lst = [100,'100',[100,'100']]
print(lst[0:2:2])
print(lst[-2:-1])
3. 列表类型的操作
3.1 列表的操作函数
列表的操作函数及描述如下所示:
操作函数 | 描述 |
---|---|
len(lst) | 列表 lst 元素的个数 |
min(lst) | 列表 lst 中的最小元素 |
max(lst) | 列表 lst 中的最大元素 |
list(x) | 将 x 转变成列表类型 |
len(lst) 获取一个列表的元素个数,即长度。 |
lst = [1,2,3]
print(lst)
min(lst) 与 max(lst) 分别返回一个列表的最小或最大元素,使用这两个函数的前提时列表中各元素可以进行比较。如果列表元素间不能比较,使用这两个函数将会报错。
list(x) 将变量 x 转变成列表类型,其中 x 可以是字符串类型,也可以是字典类型。
3.2 列表的操作方法
列表类型存在一些操作方法。
语法格式:
列表对象:方法名(参数列表)
列表的操作方法及描述如下所示:
方法 | 描述 |
---|---|
lst.append() | 在列表 lst 最后增加一个元素 x |
lst.insert(i,x) | 在列表 lst 第 i 个位置增加元素 x |
lst.clear() | 删除 lst 中所有元素 |
lst.pop(i) | 将列表 lst 中第 i 项元素取出并从 lst 中删除该元素 |
lst.remove(x) | 将列表中出现的第一个元素 x 删除 |
lst.reverse() | 将列表 lst 中的元素反转 |
lst.copy() | 生成一个新列表,复制 lst 中所有的元素 |
列表的方法主要针对列表对象,实现列表的元素的增、删、改等功能。
lst.append(x) 在列表 lst 的最后增加一个元素。
lst = [1,2,3,4]
lst.append(5)
print(lst)
lst.append(x) 仅用于在列表中增加一个元素,如果希望增加多个元素,可以使用加号,将两个列表合并。
lst1 = [1,2,3]
lst2 = [4,5,6]
lst = lst1 + lst2
print(lst)
lst.insert(i, x) 在列表 lst 中序号 i 位置上增加元素 x, 序号 i 之后的元素序号依次增加。
lst = [1,2,3]
lst.append(2,4)
print(lst)
lst.clear() 将列表 lst 的所有元素删除,清空列表。
lst = [1,2,3]
lst.clear()
print(lst)
lst.pop(i) 将返回列表 lst 中序号为 i 的元素,并将元素从列表中删除。
lst = [1,2,3]
lst.pop(2)
print(lst)
lst.remove(x) 将删除列表 lst 中第一次出现的 x 元素。
lst = [1,1,2,3]
lst.remove(1)
print(lst)
除了上述方法,还可以使用 Python 保留字 del 对列表元素或片段进行删除。
语法格式:
del 列表对象[索引序号]
del 列表对象[索引起始:索引结束]
del 列表对象[索引起始:索引结束:步长]
lst.reverse() 将列表 lst 中元素进行逆序反转。
lst = [1,2,3]
lst.reverse()
print(lst)
lst.copy()复制 lst 中所有元素生成一个新列表。
lst = [1,2,3]
lst2 = lst.copy()
print(lst2)
一个列表 lst 使用 copy 方法复制后赋值给变量 lst2, 如果不适用 copy 方法,通过直接赋值方式不能产生新列表,仅能够为列表增加一个别名。
对于基本的数据类型,如整数或字符串,可以通过等号实现元素赋值。但对于列表类型,使用等号无法实现真正的赋值。其中,lst2 = lst 语句并不是拷贝 lst 中元素给变量 lst2, 而是关联了一个引用,即 lst2 与 lst 所指向的是同一个内容。
使用索引配合等号 (=), 可以对列表元素进行修改。
使用切片配合等号 (=) 可以对列表片段进行修改,修改内容可以不等长。当使用一个列表改变另一个列表值时,Python 不要求对两个列表长度一样,但遵循“多增少减”的原则。
列表是一个十分灵活的数据结构,它具有处理任意长度、混合类型的能力,并提供了丰富的基础操作符和方法。当程序需要使用组合数据类型管理批量数据时,请尽量使用列表类型。
4. 字典类型
4.1 字典的定义
“键值对”是组织数据的一种重要方式,广泛应用在当代大型信息系统中,如 Web 系统,键值对的基本思想是将“值”信息关联一个“键”信息,进而通过键信息找对应的值信息,这个过程叫映射。Python 语言中通过字典类型实现映射。
Python 语言中的字典使用大括号 {} 建立,每个元素是一个键值对。
语法格式:
{键1:值1,键2:值2,键3:值3,…,键N:值N}
其中,键和值通过冒号连接,不同键值对通过逗号隔开。从 Python 设计角度考虑。由于大括号 {} 可以表示集合,所以,字典类型也具有和集合类似的性质,即键值对之间没有顺序不能重复。可以简单地把字典元素看成是键值对的集合。注意,尽管都使用大括号,但集合与字典是不同的类型。
d = {'name':'姓名','age':'年龄'}
print(d)
变量 d 可以看作是“学号”与“姓名”的映射关系。需要注意的是,字典各个元素并没有顺序之分。
提示:字典和集合
字典类型和集合类型形式上都采用大括号表示,但如果直接使用大括号 {}, 则生成字典类型,而不是集合类型。
4.2 字典的索引
索引是按照一定顺序检索内容的体系。列表类型采用元素顺序的位置进行索引。由于字典元素“键值对”中键是值的索引。因此,可以直接利用键值对关系索引元素。
字典中键值对的索引语法:
值 = 字典对象[键]
d = {'name':'姓名','age':'年龄'}
print(d['name'])
利用索引和赋值配合,可以对字典中每个元素进行修改。
使用大括号 {} 可以创建字典,可以创建一个空字典。通过索引和赋值配合,可以向字典中增加元素。
字典是存储可变数据量键值对的数据结构,键和值可以是任意数据类型,通过键索引值,并可以通过键修改值。
5. 字典类型的操作
5.1 字典的操作函数
字典的操作函数及描述如下所示:
操作函数 | 描述 |
---|---|
len(d) | 字典 d 的元素个数 |
min(d) | 字典 d 中键的最小值 |
max(d) | 字典 d 中键的最大值 |
dict(d) | 生成一个空字典 |
len(d) 给出字典 d 的元素个数,也称为长度。 |
d = {‘name’:'姓名', 'age':'年龄'}
print(len(d))
min(d) 和 max(d) 分别返回字典 d 中最小值或最大索引值,使用这两个函数的前提是字典中各索引元素可以进行比较。
d = {'1':'100','2':'200','3':'300'}
print(min(d))
print(max(d))
dict() 函数用于生成一个空字典,作用和 {} 相同。
5.2 字典的操作方法
字典类型有一些操作方法。
语法格式:
字典对象名.方法名(方法参数)
字典的操作方法及描述如下所示:
方法 | 描述 |
---|---|
d.keys() | 返回所有的键信息 |
d.values() | 返回所有的值信息 |
d.items() | 返回所有键值对 |
d.get(key,default) | 键存在则返回相应值,否则返回默认值 default |
d.pop(key,default) | 键存在则返回相应值 |
d.popitem() | 随机从字典中取出一个键值对,以元组 (key,value) 形式返回,同时将该键值对从字典中删除 |
d.clear() | 删除所有的键值对,清空字典 |
提示:字典的值 | |
字典类型没办法直接通过值进行索引,这是键值对定义的约束。 | |
d.keys() 返回字典中所有的键信息,返回结果是 Python 的一种内部数据类型 dict_keys, 专用于表示字典的值。如果希望更好地使用返回结果,可以将其转换为列表类型。 | |
d.values() 返回字典中的所有值信息,返回结果是 Python 的一种内部数据类型 dict_values, 如果希望更好地使用返回结果,可以将其转换为列表类型。 |
d.items() 返回字典中的键值对信息,返回结果是 Python 的一种内部数据类型 dict_items. 如果希望更好地使用返回结果,可以将其转换为列表类型,键值对以元组类型(即括号形式)表示。
d.get(key,default) 根据键信息查找并返回值信息,如果 key 存在则返回相应值,否则返回默认值,第二个元素 default 可以省略,如果省略则默认值为空。
d.pop(key,default) 根据键信息查找并取出值信息,如果 key 存在则返回相应值,否则返回默认值,第二个元素 default 可以省略,如果省略则默认值为空。相比 d.get() 方法,d.pop() 在去除相应值后,将从字典中删除对应的键值对。
d.popitem() 随机从字典中取出一个键值对,以元组 (key,value) 形式返回,取出后从字典中删除这个键值对。
d.clear() 删除字典中所有的键值对。
此外,如果希望删除字典中某一个元素,可以使用 Python 的保留字 del.
字典类型也支持保留字 in, 用来判断一个键是否存在字典中。如果在,则返回 True, 否则返回 False.
与其他组合一样,字典可以遍历循环对其元素进行遍历。
语法结构:
for 变量名 in 字典名称:
语句块
由于键值对中的键相当于索引,所以,for 循环返回的变量名是字典的索引值。如果需要获取键对应的值,可以在语句块中通过 get() 方法获得。
6. 选择题
(1)以下程序的输出结果是(B)
names = [‘小明’, ’小红’, ’小白’, ’小新’]
if ‘小明朋友’ in names:
print(‘存在’)
else:
print(‘不存在’)
- A. 存在
- B. 不存在
- C. 程序错误
- D. 不确定
(2)以下创建字典方式错误的是(B)
- A. d = {1:[1,2],3:[3,4]}
- B. d = {[1,2]:1,[3,4]:3}
- C. d = {(1,2):1, (3,4):3}
- D. d = {1:’张三’,2:’李四’}
(3)以下说法中错误的是(D)
- A. 浮点数 0.0 等于 False, 条件判断为假
- B. 空字典对象不等于 False, 条件判断为真
- C. 值为0的任何数字类型元素相当于 False, 条件判断为假
- D. 空字符串对象相当于 False, 条件判断为假
(4)以下程序的输出结果是(B)
nums = [1,2,3,4]
nums.append([5,6,7,8])
print(len(nums))
- A. 4
- B. 5
- C. 8
- D. 以上都不对
(5)以下选项中不能创建一个字典的是(A)
- A. d = {[1,2,3]:’Python’}
- B. d = {}
- C. d = {(1,2,3):’Python’}
- D. d = {3:5}
(6)以下程序的输出结果是(C)
d = {‘1’:1,’2’:2,’3’:3,’4’:4}
d2 = d
d[‘2’] = 5
print(d[‘2’]+d2[‘2’])
- A. 2
- B. 5
- C. 7
- D. 10
(7)以下数据类型属于不可变化类型的是(D)
- A. 列表
- B. 复数
- C. 字典
- D. 元组
(8)将一个字典的内容添加到另外一个字典中的方法是(A)
- A. update()
- B. keys()
- C. items()
- D. 元组
(10)a 和 b 是两个列表,将它们的内容合并为列表 c 的方法是(D)
- A. c = a.update(b)
- B. a.update(b)
- C. c = [a, b]
- D. c = a + b
PDF 讲义下载链接如下:
链接:https://pan.baidu.com/s/1rc8d2_mmtci0o5vtCSl6rg