内容正文:
第5章 组合数据类型
1
学习目标/Target
了解组合数据类型,能够归纳序列类型、集合类型和映射类型的特点
熟悉切片的基本使用,能够使用切片截取列表或元组的元素
掌握列表的常见操作,能够根据需求选择合适的方法操作列表
掌握列表推导式,能够选择合适的列表推导式构建列表
掌握元组的常见操作,能够通过字面量或tuple()函数创建元组
2
学习目标/Target
掌握集合的常见操作,能够根据需求选择合适的方法操作集合
掌握集合关系测试的方式,能够通过操作符或方法实现集合关系的操作
掌握字典的创建或访问,能够创建字典并根据键访问其对应的值
掌握字典的常见操作,能够根据需求选择合适的方法操作字典
3
章节概述/ Summary
随着大数据时代的到来,计算机在实际应用中需要批量处理相互联系的复杂数据,例如班级学生的基本信息和各科成绩等。为了有效地处理这些数据,Python 提供了组合数据类型。这些数据类型可以同时处理一组数据,简化了开发人员的工作,同时又大大提高了程序的运行效率。本章将全面介绍Python 中的组合数据类型。
4
目录/Contents
01
组合数据类型概述
列表与元素
实例:垃圾分类
02
03
5
目录/Contents
04
集合
字典
实例:手机通讯录
05
06
6
实例:垃圾分类
5.3
7
5.3 实例:垃圾分类
根据垃圾的属性,垃圾分为可回收物、厨余垃圾、有害垃圾和其他垃圾。
垃圾种类 名称
可回收物 废纸、 塑料瓶、 塑料桶、 易拉罐、 金属元件、玻璃瓶、 废旧衣物、 废弃家具、 旧数码产品、 旧家电
厨余垃圾 食材废料、 菜根菜叶、 剩菜、 剩饭、 蔬菜水果、 瓜果皮核、蛋壳、 鸡骨、 鱼骨、 过期食品
有害垃圾 废电池、 废灯管、 消毒棉棒、 废油漆、 过期药品、过期化妆品
其他垃圾 砖瓦灰土、 餐巾纸、 保鲜膜
8
5.3 实例:垃圾分类
假设小明周末聚餐后,产生的垃圾包括废纸、塑料瓶、食材废料、餐巾纸,现要将产生的垃圾分类投入垃圾桶,请编写程序,帮助小明完成垃圾的分类工作。
9
5.3 实例:垃圾分类
根据前面的描述可知,我们需要对废纸、塑料瓶、食材废料、餐厅纸这几种垃圾进行分类,实现思路具体如下。
(1)定义一个变量,用于保存待分类的垃圾名称。因为待分类的垃圾名称有多个,所以此处可以利用列表保存待分类的垃圾名称。
(2)定义一个变量,用于保存不同种类的垃圾名称。由于每个种类下有多个垃圾名称,且是固定不变的,所以此处利用4个元组分别保存每个种类下的垃圾名称。
(3)判断垃圾名称的种类。这里可以使用for语句遍历待分类垃圾的列表,取出每个垃圾名称,依次使用运算符in判断垃圾名称是否在元组中,若存在,则输出该垃圾的所属分类。
10
集合
5.4
11
5.4.1 集合的常见操作
集合是一种用于保存唯一元素的数据类型,其中元素互不相同,且没有顺序。同一集合中的所有元素的类型必须为不可变数据类型,如整数、浮点数、字符串以及元组,而不能是可变数据类型,如列表、字典、集合等。
Python中创建集合的方式非常简单,可以直接使用集合字面量创建。集合字面量使用大括号包含一个或多个元素,多个元素之间使用逗号分隔。创建集合的示例如下:
set_demo = {100, 'word', 10.5} # 创建集合
print(set_demo)
12
5.4.1 集合的常见操作
此外,还可以使用set()函数创建集合,该函数中可以传入任何组合数据类型。如果set()函数没有传入任何组合数据类型,那么会创建一个空元组,例如:
str_demo = '破釜沉舟'
set_one = set(str_demo) # 根据字符串创建集合
print(set_one)
tuple_demo = (13, 15, 17, 19)
set_two = set(tuple_demo) # 根据元组创建集合
print(set_two)
set_null = set() # 创建空集合
print(set_null)
需要注意的是,空集合只能通过set()函数创建,不能通过集合字面量的方式创建。
13
5.4.1 集合的常见操作
集合是可变的数据类型,它里面的元素可以动态地增加或删除。
方法 功能说明
S.add(x) 往集合S中添加元素x(x不属于S)
S.remove(x) 若x在集合S中存在,则删除该元素,若不存在,则会报错
S.discard(x) 若x在集合S中存在,则删除该元素,若不存在,则不会报错
S.pop() 随机返回集合S中的一个元素,同时删除该元素。若S为空,则会报错
S.clear() 清空集合S中的所有元素,使其变成一个空集合
S.copy() 复制集合S
S.isdisjoint(T) 检测集合S和T中是否有相同的元素
14
5.4.1 集合的常见操作
假设有一个集合为{10,151,33,98,57},分别使用add()、remove()、pop()和clear()方法实现集合的添加、删除与清空,示例如下:
set_demo= {10, 151, 33, 98, 57} # 创建集合
set_demo.add(61) # 向集合中添加元素
print(set_demo)
set_demo.remove(151) # 删除集合中的一个指定元素
print(set_demo)
set_demo.pop() # 随机删除集合中的一个元素
print(set_demo)
set_demo.clear() # 删除集合中的所有元素
print(set_demo)
15
5.4.2 集合关系测试
数学中,两个集合关系的操作主要包括交集、并集、差集、补集。设A、B是两个集合,集合关系的操作介绍如下:
交集:属于集合A且属于集合B的元素所组成的集合,记作A∩B。
并集:集合A和集合B的元素合并在一起组成的集合,记作A∪B。
差集:属于集合A但不属于集合B的元素所组成的集合,叫做A与B的差集;属于集合B但不属于集合A的元素所组成的集合,叫做B与A的差集。
补集:属于集合A和集合B但不同时属于两者的元素所组成的集合,记作C ∪ A。
16
5.4.2 集合关系测试
Python提供了四种操作符以实现这四种操作,分别是“|”(并集操作符)、“-”(差集操作符)、“&”(交集操作符)、“^”(补集操作符)。
17
5.4.2 集合关系测试
此外,Python还提供了与增强操作符功能相同的方法。接下来,以集合S和T为例,通过一张表罗列这两个集合之间关系的操作。
操作 功能说明
S|T或S.union(T) 返回一个新集合,该集合包含属于S和T的所有元素
S-T或S.difference(T) 返回一个新集合,该集合包含属于集合S但不属于集合T的元素
S&T或S.intersection(T) 返回一个新集合,该集合包含同时属于集合S和T的元素
S^T或S.symmetric_difference(T) 返回一个新集合,该集合包含集合S和T中的元素,但不包含同时属于两者的元素
S|=T或S.update(T) 更新集合S,该集合包含集合S和T所有的元素
18
5.4.2 集合关系测试
此外,Python还提供了与增强操作符功能相同的方法。接下来,以集合S和T为例,通过一张表罗列这两个集合之间关系的操作。
操作 功能说明
S|=T或S.update(T) 更新集合S,该集合包含集合S和T所有的元素
S-=T或S.difference_update(T) 更新集合S,该集合包含在集合S中但不属于集合T的元素
S&=T或S.intersection_update(T) 更新集合S,该集合包含同时属于集合S和T的元素
S^=T或
S.symmetric_difference_update(T) 更新集合S,该集合包含集合S和T中的元素,但不包含同时属于两者的元素
19
5.4.2 集合关系测试
假设有集合a={1,11,21,31,17}和集合b={0,11,20,17,30},它们执行取交集、并集、差集、补集的操作,示例如下:
a = {1, 11, 21, 31, 17}
b = {0, 11, 20, 17, 30}
result_one = a | b # 取a和b的并集
print(result_one)
result_two = a - b # 取a和b的差集
print(result_two)
result_thr = a & b # 取a和b的交集
print(result_thr)
result_fou = a ^ b # 取a和b的补集
print(result_fou)
20
5.4.2 集合关系测试
Python中使用比较运算符可以用来检查某个集合是否为其它集合的子集或者超集,其中,“<”或者“<=”运算符用于判断真子集和子集,“>”和“>=”运算符用于判断的是真超集和超集。
set_one = set('what')
set_two = set('hat')
result = set_one < set_two # 判断set_one是否为set_two的严格子集
print(result)
result = set_one > set_two # 判断set_one是否为set_two的严格超集
print(result)
21
$$