内容正文:
第5章 组合数据类型
1
学习目标/Target
了解组合数据类型,能够归纳序列类型、集合类型和映射类型的特点
熟悉切片的基本使用,能够使用切片截取列表或元组的元素
掌握列表的常见操作,能够根据需求选择合适的方法操作列表
掌握列表推导式,能够选择合适的列表推导式构建列表
掌握元组的常见操作,能够通过字面量或tuple()函数创建元组
2
学习目标/Target
掌握集合的常见操作,能够根据需求选择合适的方法操作集合
掌握集合关系测试的方式,能够通过操作符或方法实现集合关系的操作
掌握字典的创建或访问,能够创建字典并根据键访问其对应的值
掌握字典的常见操作,能够根据需求选择合适的方法操作字典
3
章节概述/ Summary
随着大数据时代的到来,计算机在实际应用中需要批量处理相互联系的复杂数据,例如班级学生的基本信息和各科成绩等。为了有效地处理这些数据,Python 提供了组合数据类型。这些数据类型可以同时处理一组数据,简化了开发人员的工作,同时又大大提高了程序的运行效率。本章将全面介绍Python 中的组合数据类型。
4
目录/Contents
01
组合数据类型概述
列表与元素
实例:垃圾分类
02
03
5
目录/Contents
04
集合
字典
实例:手机通讯录
05
06
6
列表与元组
5.2
7
5.2.1 切片
切片是指对序列类型截取其中一部分的操作。
序列[起始索引:结束索引:步长]
起始索引和结束索引用于给定切片截取的范围,该范围属于左闭右开的区间,即包含起始索引,不包含结束索引本身;
步长的取值可以是正整数和负整数,默认值为1。
8
5.2.1 切片
1. 步长为正整数
当切片的步长为正整数时,会按照从左到右的顺序截取元素,每隔“步长-1”个元素进行一次截取。需要注意的是,起始索引应该小于结束索引,否则切片截取的结果为空字符串。
words = '敏而好学不耻下问'
print(words[1:6]) # 没指定步长,默认值为1
print(words[1:6:2]) # 指定步长为2
print(words[6:1:2]) # 起始索引大于结束索引,指定步长为2
9
5.2.1 切片
当切片的步长为负整数时,会按照从右到左的顺序截取元素,每隔“步长-1”个元素进行一次截取。需要注意的是,起始索引应该大于结束索引,否则切片截取的结果为空字符串。
words = '敏而好学不耻下问'
print(words[6:1:-1]) # 指定步长为-1
print(words[6:1:-2]) # 指定步长为-2
print(words[1:6:-2]) # 起始索引小于结束索引,指定步长为-2
2. 步长为负整数
10
5.2.2 列表
列表字面量是比较简单的创建列表的方式,它直接采用中括号的形式包含零个、一个或多个元素,各元素之间使用英文逗号分隔。
[] # 创建空列表,列表中没有任何元素
[1, 10, 55, 20, 6] # 创建列表,每个元素的类型均为整型
[10, ‘word', True, 3.1415] # 创建列表,每个元素的类型均不同
1. 创建列表
11
5.2.2 列表
通过list()函数可以根据已有的元组、字符串或其他组合数据类型创建列表。如果没有给该函数传入任何组合数据类型,那么会创建一个空列表。
str_demo = '破釜沉舟'
print(list(str_demo)) # 根据字符串创建列表
tuple_demo = (1, 3, 5, 7, 9)
print(list(tuple_demo)) # 根据元组创建列表
print(list()) # 创建空列表
1. 创建列表
12
5.2.2 列表
使用for语句可以循环对列表中的元素进行遍历操作。
list_demo = list('破釜沉舟')
for char in list_demo: # 利用循环遍历列表的全部元素
print(char)
2. 遍历列表
13
5.2.2 列表
在Python中,可以使用索引或切片访问或修改列表中的元素,还可以直接使用运算符+=将一个列表的元素添加到另一个列表的末尾。使用索引或切片操作列表时,如果不对列表元素进行赋值操作,那么会根据索引或切片访问相应元素的值或者截取部分元素;如果对列表元素进行赋值操作,那么会将相应的元素值修改为新赋的值。
3. 修改列表元素
14
5.2.2 列表
nums = [11, 22, 33]
nums[0] = 55 # 通过索引获取索引0对应的元素,并重新给元素赋值
print(nums)
nums[0:2] = [0, 1] # 通过切片获取索引0、1对应的元素,并重新给这两个元素赋值
print(nums)
other_nums = [5, 6]
nums += other_nums # 通过+=向nums列表中添加other_nums列表的元素
print(nums)
修改列表元素的示例代码:
3. 修改列表元素
15
5.2.2 列表
需要注意的是,当使用另一个列表来对一个列表的多个元素进行修改时,Python并不要求这两个列表的长度相同,但需要遵循“多增少减”的原则。示例如下:
nums = [11, 22, 33]
nums[0:2] = [0] # 列表[0]的长度小于nums[0:2]截取结果的长度
print(nums)
nums[0:2] = [10, 20, 30] # 列表[10, 20, 30]的长度大于nums[0:2]截取结果的长度
print(nums)
3. 修改列表元素
16
5.2.2 列表
Python针对列表提供了一些函数或方法,以便开发人员能够轻松地操作列表的元素。
函数/方法 功能说明
len(s) 计算序列s的长度或元素个数
min(s) 返回序列s中的最小元素
max(s) 返回序列s中的最大元素
list.append() 在列表的末尾添加元素
list.extend() 在列表中添加另一列表的元素,功能等同于+=
list.insert(i) 在列表索引为i的元素之前插入元素
len(s) 计算序列s的长度或元素个数
4. 其他操作
17
5.2.2 列表
Python针对列表提供了一些函数或方法,以便开发人员能够轻松地操作列表的元素。
函数/方法 功能说明
list.pop(i) 取出并删除列表中索引为i的元素
list.remove() 删除列表中第一次出现的元素
list.reverse() 将列表的元素反转
list.clear() 删除列表中的所有元素
list.copy() 生成新列表,并复制列表中的所有元素
list.sort(key, reverse) 将列表中的元素排序。该方法有两个参数,其中参数key用于指定排序的比较方式,默认使用列表的元素进行比较;参数reverse用于指定是否将列表降序排序,默认值为False,表示按照正序方式排列列表的元素
4. 其他操作
18
5.2.2 列表
nums = [0, 5, 10, 33, 8, 19, 25, 6]
nums.append(2) # 在列表末尾添加元素2
print(nums)
nums.insert(2, 22) # 在列表中索引2元素的前面插入元素22
print(nums)
nums.remove(33) # 删除列表中指定的元素33
print(nums)
nums.reverse() # 将列表的元素反转
print(nums)
nums.sort() # 将列表的元素按从小到大的顺序排序
print(nums)
nums.clear() # 删除列表中的所有元素
print(nums)
下面通过示例演示一些方法或函数的使用。
4. 其他操作
19
5.2.3 列表推导式
列表推导式是符合Python语法规则的复合表达式,它能以简洁的方式根据已有的列表构建满足特定需求的新列表。列表推导式的基本语法格式如下:
[表达式 for 临时变量 in 目标对象]
例如,通过列表推导式构建新列表,新列表中的元素是其他列表中每个元素值的平方:
ls = [1, 2, 3, 4, 5, 6, 7, 8]
new_ls = [temp * temp for temp in ls] # 通过列表推导式构建新列表
print(new_ls)
20
5.2.3 列表推导式
1. 带if语句的列表推导式
在基本列表推导式的for语句之后添加一个if语句,就组成了带if语句的列表推导式,其语法格式如下:
[表达式 for 临时变量 in 目标对象 if 判断条件]
例如,通过带if语句的列表推导式构建新列表,新列表中只保留列表ls中大于4的元素:
new_ls = [temp for temp in ls if temp > 4]
print(new_ls)
21
5.2.3 列表推导式
在基本列表推导式的for语句之前添加一个if-else语句,就组成了带if-else语句的列表推导式,其语法格式如下:
[表达式1 if 判断条件 else 表达式2 for 临时变量 in 目标对象]
例如,通过带if-else语句的列表推导式构建新列表,新列表中保留列表ls中值为偶数的元素,以及值为奇数时加1的结果,具体代码如下:
new_ls = [temp if temp % 2 == 0 else temp + 1 for temp in ls]
print(new_ls)
2.带if-else语句的列表推导式
22
5.2.3 列表推导式
在基本列表推导式的for语句之后添加一个for语句,就组成了带for循环嵌套的列表推导式,其语法格式如下:
[表达式 for 临时变量1 in 目标对象1 for 临时变量2 in 目标对象2]
例如,取列表ls_one和列表ls_two中元素的和作为列表ls_three的元素,示例代码如下:
ls_one = [1, 2, 3]
ls_two = [3, 4, 5]
ls_three = [x + y for x in ls_one for y in ls_two]
print(ls_three)
3.带for循环嵌套的列表推导式
23
5.2.4 元组
元组与列表类似,它也是由一组按特定顺序排列的元素组成,元素的个数、类型不受限制,但其存储的元素不能修改。
Python中创建元组的方式非常简单,可以直接通过元组字面量创建,元组字面量使用小括号包含零个、一个或多个元素,多个元素之间使用逗号分隔。非空元组的括号可以省略,但空元组的括号不能省略。
() # 创建空元组
(1, ) # 创建包含一个元素的元组
1, # 创建包含一个元素的元组,省略括号
(1, 2, 3) # 创建包含多个元素的元组
1, 2, 3 # 创建包含多个元素的元组,省略括号
24
5.2.4 元组
此外,使用tuple()函数可以根据已有的列表、字符串或其他组合数据类型创建元组。如果没有给tuple()函数传入任何组合数据类型,那么会创建一个空元组,示例如下:
str_demo = '破釜沉舟'
print(tuple(str_demo)) # 根据字符串创建元组
list_demo = [1, 3, 5, 7, 9]
print(tuple(list_demo)) # 根据列表创建元组
print(tuple()) # 创建空元组
25
5.2.4 元组
元组在表达固定数据、多变量同步赋值、循环遍历、函数多返回值等情况下是十分有用的,示例代码如下:
x, y = (10, 20) # 多个变量同步赋值
print(x, y)
for x, y in ((10, 20), (11, 21), (12, 22)): # 循环遍历元组
print(x, y)
26
$$