Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解

Python 学习笔记(第五期)------组合数据类型:列表、元组、集合与字典精讲------核心知识点自测与详解

本自测解析针对 Python 学习笔记系列第五期(组合数据类型:列表、元组、集合与字典精讲)的核心内容。共 10 题,每题包含题目回顾、考查知识点、详细解答与分析,帮助读者巩固 Python 组合数据类型的核心技能。
文章索引:

Python 学习笔记(第五期)------组合数据类型:列表、元组、集合与字典精讲

更多自我检测系列欢迎浏览:每日知识点小问答

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~

第五期:组合数据类型(第 1-5 题)

题目一:序列类型概述与索引机制

题目:Python 中的序列类型包括哪些?请说明序列类型的"双向索引"机制,并写出以下代码的输出结果。

python

复制代码
text = "Python"
print(text[0])
print(text[-1])
print(text[1:4])
print(text[::-1])
考查知识点
  • 序列类型概述 ------ 第五期 §1
  • 双向索引与切片 ------ 第五期 §1
详细解答

序列类型包括

序列类型 特点 是否可变
字符串(str) 字符序列 ❌ 不可变
列表(list) 任意元素序列 ✅ 可变
元组(tuple) 任意元素序列 ❌ 不可变

双向索引机制

text

复制代码
字符串 "Python" 的索引示例:

正向索引:   0    1    2    3    4    5
           ┌────┬────┬────┬────┬────┬────┐
           │ P  │ y  │ t  │ h  │ o  │ n  │
           └────┴────┴────┴────┴────┴────┘
反向索引:  -6   -5   -4   -3   -2   -1

代码输出

python

复制代码
print(text[0])      # P(正向索引第1个字符)
print(text[-1])     # n(反向索引第1个字符,即最后1个)
print(text[1:4])    # yth(切片:索引1到3,不包含4)
print(text[::-1])   # nohtyP(步长为-1,反转字符串)

题目二:列表的创建与访问

题目 :请写出以下代码的输出结果,并说明列表切片 [start:end:step] 中三个参数的含义。

python

复制代码
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]

print(fruits[0])
print(fruits[-1])
print(fruits[1:4])
print(fruits[::2])
print(fruits[::-1])
考查知识点
  • 列表的创建与访问 ------ 第五期 §2.1、§2.2
  • 切片语法 ------ 第五期 §2.2
详细解答

代码输出

text

复制代码
苹果
西瓜
['香蕉', '橙子', '葡萄']
['苹果', '橙子', '西瓜']
['西瓜', '葡萄', '橙子', '香蕉', '苹果']

切片参数含义

参数 含义 示例
start 起始索引(包含) fruits[1:4] 从索引1开始
end 结束索引(不包含 fruits[1:4] 到索引3结束
step 步长(每隔几个取一个) fruits[::2] 每隔2个取1个

⚠️ 注意 :切片返回的是新列表 ,原列表不变。[::-1] 是反转列表的经典写法。

题目三:列表的添加与删除操作

题目 :请写出以下代码的输出结果,并说明 append()extend()insert() 三个方法的区别。

python

复制代码
numbers = [1, 2, 3]

numbers.append(4)
print(numbers)

numbers.extend([5, 6])
print(numbers)

numbers.insert(0, 0)
print(numbers)
考查知识点
  • 列表添加元素 ------ 第五期 §2.3
  • 三种添加方法的区别 ------ 第五期 §2.3
详细解答

代码输出

text

复制代码
[1, 2, 3, 4]
[1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]

三种添加方法对比

方法 作用 示例 结果
append(x) 末尾 添加单个元素 [1,2].append(3) [1,2,3]
extend(iterable) 末尾 添加多个元素(逐个) [1,2].extend([3,4]) [1,2,3,4]
insert(i, x) 指定位置插入元素 [1,2,3].insert(1,99) [1,99,2,3]

⚠️ 易错点append([3,4]) 会将整个列表作为一个元素添加,结果为 [1,2,[3,4]];而 extend([3,4]) 会逐个添加元素,结果为 [1,2,3,4]

题目四:列表的排序与反转

题目 :请写出以下代码的输出结果,并说明 sort()sorted() 的区别。

python

复制代码
numbers = [6, 2, 5, 3, 1, 4]

numbers.sort()
print(numbers)

numbers.sort(reverse=True)
print(numbers)

original = [3, 1, 4, 1, 5]
new_sorted = sorted(original)
print(original)
print(new_sorted)
考查知识点
  • 列表排序 ------ 第五期 §2.5
  • sort() vs sorted() ------ 第五期 §2.5
详细解答

代码输出

text

复制代码
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]
[3, 1, 4, 1, 5]
[1, 1, 3, 4, 5]

sort() vs sorted() 对比

对比维度 list.sort() sorted(list)
是否原地修改 ✅ 是(修改原列表) ❌ 否(返回新列表)
返回值 None 排序后的新列表
适用场景 不需要保留原列表 需要保留原列表

其他排序方法

方法 作用 示例
reverse() 反转列表顺序(原地修改) [1,2,3].reverse()[3,2,1]
sort(key=len) 按指定规则排序 按字符串长度排序

题目五:列表推导式

题目 :请分别用传统 for 循环列表推导式 生成 1 到 10 的平方数列表。列表推导式相比传统 for 循环有哪些优势?

考查知识点
  • 列表推导式 ------ 第五期 §2.6
详细解答

传统 for 循环

python

复制代码
squares = []
for i in range(1, 11):
    squares.append(i ** 2)
print(squares)   # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表推导式

python

复制代码
squares = [i ** 2 for i in range(1, 11)]
print(squares)   # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

带条件的列表推导式(扩展):

python

复制代码
# 只保留 1~20 中的偶数
evens = [i for i in range(1, 21) if i % 2 == 0]
print(evens)     # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

列表推导式的优势

优势 说明
代码简洁 一行代码替代多行循环
可读性好 逻辑清晰,表达直观
性能略优 在简单场景下比 for 循环稍快

第五期:组合数据类型(第 6-10 题)

题目六:元组的特点与不可变性

题目 :请写出以下代码的输出结果,并解释为什么 (5)(5,) 的结果不同。元组有哪些主要特点?

python

复制代码
t1 = (1, 2, 3)
print(t1[0])

t2 = (5)
t3 = (5,)

print(type(t2))
print(type(t3))
考查知识点
  • 元组的创建与访问 ------ 第五期 §3.1、§3.2
  • 单元素元组的特殊写法 ------ 第五期 §3.1
  • 元组的不可变性 ------ 第五期 §3.3
详细解答

代码输出

text

复制代码
1
<class 'int'>
<class 'tuple'>

为什么 (5)(5,) 不同

写法 类型 原因
(5) int 圆括号被解释为数学运算优先级,不是元组
(5,) tuple 逗号告诉 Python 这是元组,单元素元组必须加逗号

元组的主要特点

特点 说明
不可变 一旦创建,不能增删改元素
有序 元素有固定顺序,支持索引和切片
可哈希 可以作为字典的键或集合的元素
性能更好 比列表占用内存更小,访问速度更快

题目七:集合的去重与集合运算

题目:请写出以下代码的输出结果,并说明集合的三大特性。集合中能存放列表吗?为什么?

python

复制代码
s1 = set([1, 2, 2, 3, 3, 4])
print(s1)

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

print(A | B)
print(A & B)
print(A - B)
print(A ^ B)
考查知识点
  • 集合的创建与去重 ------ 第五期 §4.1
  • 集合运算 ------ 第五期 §4.3
  • 集合的三大特性 ------ 第五期 §1
详细解答

代码输出

text

复制代码
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 7, 8}
{4, 5}
{1, 2, 3}
{1, 2, 3, 6, 7, 8}

集合的三大特性

特性 含义
确定性 任何一个元素是否在集合中是确定的
互异性 集合中的元素互不相同(自动去重)
无序性 集合中的元素没有顺序

为什么集合不能存放列表

  • 集合的元素必须是不可变类型(可哈希)
  • 列表是可变类型,不能作为集合元素
  • 同理,字典、集合本身也不能作为集合元素
  • ✅ 可存放:数字、字符串、元组

题目八:字典的创建与访问

题目 :请写出以下代码的输出结果,并说明字典的键必须满足什么条件?使用 get() 方法访问字典有什么好处?

python

复制代码
person = {"name": "张三", "age": 18, "city": "北京"}

print(person["name"])
print(person.get("city"))
print(person.get("score"))
print(person.get("score", 0))
考查知识点
  • 字典的创建与访问 ------ 第五期 §5.1、§5.2
  • get() 方法 ------ 第五期 §5.2
  • 字典键的约束条件 ------ 第五期 §5.6
详细解答

代码输出

text

复制代码
张三
北京
None
0

字典键的约束条件

条件 说明
唯一性 每个键只能对应一个值,键不能重复
不可变 键必须是不可变类型(字符串、数字、元组)
不能作为键的类型 列表、字典、集合(可变类型)

get() 方法的优势

对比 dict[key] dict.get(key)
键不存在时 抛出 KeyError 返回 None(或指定默认值)
适用场景 确定键一定存在 键可能不存在,需要安全访问

题目九:字典的添加、修改与删除

题目:请写出以下代码的输出结果,并说明修改字典元素和添加字典元素在语法上有什么区别。

python

复制代码
person = {"name": "张三", "age": 18}

person["city"] = "北京"
print(person)

person["age"] = 20
print(person)

person.update({"age": 22, "job": "工程师"})
print(person)

del person["city"]
print(person)
考查知识点
  • 字典元素的添加与修改 ------ 第五期 §5.3
  • 字典元素的删除 ------ 第五期 §5.4
  • update() 方法 ------ 第五期 §5.3
详细解答

代码输出

text

复制代码
{'name': '张三', 'age': 18, 'city': '北京'}
{'name': '张三', 'age': 20, 'city': '北京'}
{'name': '张三', 'age': 22, 'city': '北京', 'job': '工程师'}
{'name': '张三', 'age': 22, 'job': '工程师'}

添加与修改的区别

操作 语法 效果
添加 dict[新键] = 值 键不存在时,新增键值对
修改 dict[已存在键] = 新值 键已存在时,更新对应的值

💡 关键点 :Python 字典的添加和修改使用完全相同的语法 ,区别仅在于键是否已存在。所以 dict[key] = value 既是添加也是修改。

字典的删除方法

方法 作用
del dict[key] 删除指定键(键不存在时抛出 KeyError
dict.pop(key) 删除指定键并返回对应的值
dict.popitem() 随机删除一个键值对
dict.clear() 清空所有元素

题目十:组合数据类型对比与综合实战

题目 :请从是否可变是否有序元素是否唯一 三个维度对比 listtuplesetdict 四种数据类型。结合"十大歌手评分系统"实战,说明为什么在计算最终得分时使用列表排序比使用集合更合适?

考查知识点
  • 四种数据类型对比 ------ 第五期 总结
  • 综合实战解析 ------ 第五期 §7.1
详细解答

四种数据类型对比表

类型 是否可变 是否有序 元素是否唯一 创建示例
list(列表) ✅ 可变 ✅ 有序 ❌ 允许重复 [1, 2, "a"]
tuple(元组) ❌ 不可变 ✅ 有序 ❌ 允许重复 (1, 2, "a")
set(集合) ✅ 可变 ❌ 无序 必须唯一 {1, 2, 3}
dict(字典) ✅ 可变 ❌ 无序(Py3.7+按插入顺序) 必须唯一 {"name": "Tom"}

为什么"十大歌手评分"使用列表而不是集合

python

复制代码
scores = [9.5, 8.8, 9.2, 7.5, 9.8, 9.0, 8.5, 9.3, 8.9, 9.1]
scores.sort()
valid_scores = scores[1:-1]  # 去掉最高分和最低分
average = sum(valid_scores) / len(valid_scores)

原因分析

原因 说明
需要排序 集合是无序的,无法进行排序操作
需要切片 集合不支持切片,无法用 [1:-1] 去掉最高最低分
需要索引 集合不支持索引访问,无法获取单个元素
允许重复 评分可能存在相同分数,集合会自动去重,丢失数据

附:知识点对应总表

题号 主要考查知识点(对应笔记章节)
1 第五期 §1 序列类型概述与双向索引
2 第五期 §2.1 列表创建;§2.2 列表访问与切片
3 第五期 §2.3 列表添加方法(append/extend/insert)
4 第五期 §2.5 列表排序(sort vs sorted)
5 第五期 §2.6 列表推导式
6 第五期 §3.1 元组创建;§3.3 元组不可变性
7 第五期 §1 集合三大特性;§4.3 集合运算
8 第五期 §5.1 字典创建;§5.2 字典访问与 get()
9 第五期 §5.3 字典添加与修改;§5.4 字典删除
10 第五期 总结(四种类型对比);§7.1 综合实战

学习建议:对于答错的题目,请回看第五期对应章节,并动手在 Python 交互式环境中执行相关命令。组合数据类型是 Python 编程中最常用的数据结构,熟练掌握列表、元组、集合、字典的各自特性和适用场景,是写出高质量 Python 代码的基础。
--- Compiled and Authored by Whisky --- July 22 nd, 2026

相关推荐
砚凝霜1 小时前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
woshihuanglaoshi1 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
码农学院1 小时前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
程序员羽痕1 小时前
基于 Django + PyTorch 的中文字体识别系统
pytorch·python·django
Database_Cool_3 小时前
阿里云 RDS MySQL 降本增效实战:从规格选型到成本优化,月成本降低64%全攻略
mysql·阿里云·云计算
灯澜忆梦10 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-10 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-11 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
世人万千丶11 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙