当前位置: 首页 > news >正文

03 Python的集合类型

Python 集合类型速成教程

目标:快速掌握 Python 四大集合类型的核心用法


一、列表 (List)

1.1 核心知识点

定义:有序、可变、可重复的数据集合

# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]  # 可以混合类型

常用操作

操作 代码示例 说明
索引访问 fruits[0]"苹果" 从0开始计数
切片 fruits[0:2]["苹果", "香蕉"] 左闭右开
添加元素 fruits.append("葡萄") 末尾添加
插入元素 fruits.insert(1, "芒果") 指定位置插入
删除元素 fruits.remove("香蕉") 按值删除
弹出元素 fruits.pop() 删除并返回最后一个
列表长度 len(fruits) 获取元素个数

1.2 练习题

练习1-1:补全代码,实现列表的基本操作

# 创建一个包含 5 个水果名称的列表
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]# TODO: 获取列表的第2个元素(索引为1),赋值给变量 second_fruit
second_fruit = __________
print(f"第二个水果是: {second_fruit}")
# 预期输出: 第二个水果是: 香蕉# TODO: 获取前3个水果(切片),赋值给变量 first_three
first_three = __________
print(f"前三个水果是: {first_three}")
# 预期输出: 前三个水果是: ['苹果', '香蕉', '橙子']# TODO: 在列表末尾添加 "芒果"
__________
print(f"添加后: {fruits}")
# 预期输出: 添加后: ['苹果', '香蕉', '橙子', '葡萄', '西瓜', '芒果']# TODO: 删除 "橙子"
__________
print(f"删除后: {fruits}")
# 预期输出: 删除后: ['苹果', '香蕉', '葡萄', '西瓜', '芒果']# TODO: 获取列表长度,赋值给变量 count
count = __________
print(f"水果总数: {count}")
# 预期输出: 水果总数: 5

二、元组 (Tuple)

2.1 核心知识点

定义:有序、不可变、可重复的数据集合

# 创建元组
coordinates = (10, 20)
colors = ("红", "绿", "蓝")
single = (5,)  # 单元素元组必须加逗号!

特点

  • 与列表类似,可以索引和切片
  • 不能修改(不能增删改元素)
  • 性能比列表稍好,适合存储固定数据

常用操作

操作 代码示例 说明
索引访问 coordinates[0]10 与列表相同
切片 colors[0:2]("红", "绿") 与列表相同
解包 x, y = coordinates 快速赋值
长度 len(colors) 获取元素个数

2.2 练习题

练习2-1:补全代码,理解元组的基本用法

# 创建一个包含学生信息的元组 (姓名, 年龄, 成绩)
student = ("张三", 18, 85.5)# TODO: 获取学生的姓名,赋值给变量 name
name = __________
print(f"学生姓名: {name}")
# 预期输出: 学生姓名: 张三# TODO: 使用元组解包,将姓名、年龄、成绩分别赋值给 name, age, score
__________
print(f"{name} 今年 {age} 岁,成绩 {score} 分")
# 预期输出: 张三 今年 18 岁,成绩 85.5 分# TODO: 获取元组的长度,赋值给变量 length
length = __________
print(f"元组长度: {length}")
# 预期输出: 元组长度: 3# 下面这行代码会报错,因为元组不可变,请注释掉它
# student[1] = 20

三、字典 (Dictionary)

3.1 核心知识点

定义:键值对(key-value)的集合,键唯一,无序(Python 3.7+ 保持插入顺序)

# 创建字典
person = {"name": "李四","age": 25,"city": "北京"
}

常用操作

操作 代码示例 说明
访问值 person["name"]"李四" 通过键获取值
安全访问 person.get("phone", "未知") 键不存在返回默认值
添加/修改 person["age"] = 26 键存在则修改,不存在则添加
删除键值对 del person["city"] 删除指定键值对
获取所有键 person.keys() 返回所有键
获取所有值 person.values() 返回所有值
获取所有项 person.items() 返回键值对元组

3.2 练习题

练习3-1:补全代码,实现字典的基本操作

# 创建一个学生信息字典
student = {"name": "王五","age": 20,"major": "计算机科学"
}# TODO: 获取学生的专业,赋值给变量 major
major = __________
print(f"专业: {major}")
# 预期输出: 专业: 计算机科学# TODO: 安全获取学生的电话,如果不存在返回 "未填写",赋值给 phone
phone = __________
print(f"电话: {phone}")
# 预期输出: 电话: 未填写# TODO: 添加学生的成绩 "score" 为 90
__________
print(f"添加成绩后: {student}")
# 预期输出: 添加成绩后: {'name': '王五', 'age': 20, 'major': '计算机科学', 'score': 90}# TODO: 修改学生的年龄为 21
__________
print(f"修改年龄后: {student}")
# 预期输出: 修改年龄后: {'name': '王五', 'age': 21, 'major': '计算机科学', 'score': 90}# TODO: 遍历字典,打印所有键值对
print("学生信息:")
__________
# 预期输出:
# 学生信息:
# name: 王五
# age: 21
# major: 计算机科学
# score: 90

四、集合 (Set)

4.1 核心知识点

定义无序不重复的元素集合

# 创建集合
numbers = {1, 2, 3, 4, 5}
empty_set = set()  # 空集合必须用 set(),不能用 {}# 自动去重
unique = {1, 2, 2, 3, 3, 3}  # 实际为 {1, 2, 3}

常用操作

操作 代码示例 说明
添加元素 numbers.add(6) 添加单个元素
删除元素 numbers.remove(3) 删除指定元素(不存在会报错)
安全删除 numbers.discard(10) 删除指定元素(不存在不报错)
并集 a | ba.union(b) 两个集合的所有元素
交集 a & ba.intersection(b) 两个集合的共同元素
差集 a - ba.difference(b) 在a中但不在b中的元素

4.2 练习题

练习4-1:补全代码,实现集合的基本操作

# 创建两个集合
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}# TODO: 向 set_a 添加元素 10
__________
print(f"添加后 set_a: {set_a}")
# 预期输出: 添加后 set_a: {1, 2, 3, 4, 5, 10}# TODO: 从 set_a 删除元素 3
__________
print(f"删除后 set_a: {set_a}")
# 预期输出: 删除后 set_a: {1, 2, 4, 5, 10}# TODO: 计算 set_a 和 set_b 的并集,赋值给 union_set
union_set = __________
print(f"并集: {union_set}")
# 预期输出: 并集: {1, 2, 4, 5, 6, 7, 8, 10}# TODO: 计算 set_a 和 set_b 的交集,赋值给 intersection_set
intersection_set = __________
print(f"交集: {intersection_set}")
# 预期输出: 交集: {4, 5}# TODO: 计算 set_a - set_b 的差集,赋值给 diff_set
diff_set = __________
print(f"差集 (a-b): {diff_set}")
# 预期输出: 差集 (a-b): {1, 2, 10}# TODO: 将列表 [1, 2, 2, 3, 3, 3, 4] 转换为集合去重,赋值给 unique_set
my_list = [1, 2, 2, 3, 3, 3, 4]
unique_set = __________
print(f"去重后: {unique_set}")
# 预期输出: 去重后: {1, 2, 3, 4}

五、综合练习

练习5-1:学生成绩管理系统

# 有一个学生成绩列表,每个元素是一个字典
students = [{"name": "张三", "scores": [85, 90, 78]},{"name": "李四", "scores": [92, 88, 95]},{"name": "王五", "scores": [78, 85, 80]}
]# TODO: 计算每个学生的平均分,并添加到字典中,key 为 "average"
# 提示: sum(列表) / len(列表) 可以计算平均值
for student in students:scores = student["scores"]average = __________student["average"] = averageprint("学生成绩:")
for student in students:print(f"{student['name']}: 平均分 = {student['average']:.2f}")# 预期输出:
# 学生成绩:
# 张三: 平均分 = 84.33
# 李四: 平均分 = 91.67
# 王五: 平均分 = 81.00# TODO: 找出平均分最高的学生姓名
highest_student = None
highest_average = 0
for student in students:if student["average"] > highest_average:highest_average = student["average"]highest_student = __________print(f"\n最高分学生: {highest_student}, 平均分: {highest_average:.2f}")
# 预期输出: 
# 最高分学生: 李四, 平均分: 91.67

附录:答案

练习1-1 答案

second_fruit = fruits[1]
first_three = fruits[0:3]
fruits.append("芒果")
fruits.remove("橙子")
count = len(fruits)

练习2-1 答案

name = student[0]
name, age, score = student
length = len(student)

练习3-1 答案

major = student["major"]
phone = student.get("phone", "未填写")
student["score"] = 90
student["age"] = 21
for key, value in student.items():print(f"{key}: {value}")

练习4-1 答案

set_a.add(10)
set_a.remove(3)
union_set = set_a | set_b  # 或 set_a.union(set_b)
intersection_set = set_a & set_b  # 或 set_a.intersection(set_b)
diff_set = set_a - set_b  # 或 set_a.difference(set_b)
unique_set = set(my_list)

练习5-1 答案

average = sum(scores) / len(scores)
highest_student = student["name"]

快速对比表

特性 列表 List 元组 Tuple 字典 Dictionary 集合 Set
符号 [] () {} {}set()
有序 ✅ (3.7+)
可变
重复 ❌ (键唯一)
索引 数字索引 数字索引 键索引 无索引
适用场景 需要修改的有序数据 固定数据、函数多返回值 键值对映射 去重、集合运算
http://www.jsqmd.com/news/365343/

相关文章:

  • 【Django毕设源码分享】基于Django的网络设备租赁系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 腾讯混元模型部署避坑:vllm启动常见问题解决方案
  • Qwen1.5-1.8B-Chat-GPTQ-Int4效果实测:中文情感分析、观点抽取、舆情摘要生成
  • 手把手教你使用OFA模型:图片与英文语义关系一键分析
  • MusePublic生成质量展示:30步推理下细节还原度与画质稳定性
  • 【Django毕设源码分享】基于Django+Python的膳食健康系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 学霸同款AI论文软件,千笔ai写作 VS 灵感风暴AI,专科生专属利器!
  • C++——多态
  • DeepSeek-OCR-2小白入门:3步完成文档结构化提取
  • Qwen3-TTS声音设计功能实测:打造个性化语音方案
  • mPLUG-Owl3-2B本地化教程:国产昇腾910B芯片适配可行性验证与精度对比
  • AudioLDM-S开源大模型价值再定义:环境音效生成领域的垂直开源标杆
  • 第4章 Docker环境搭建
  • 第5章 Docker命令行基础
  • EmbeddingGemma-300m入门指南:快速实现文本相似度计算
  • 璀璨星河艺术生成器:小白也能做的专业级AI绘画
  • 实测才敢推!8个AI论文写作软件测评:自考毕业论文+格式规范全攻略
  • MinerU能否识别印章签名?安防场景初步验证
  • WeKnora性能实测:千页文档问答响应速度展示
  • 从文本到语音:Fish Speech 1.5在内容创作中的应用案例
  • 通义千问3-VL-Reranker-8B开箱体验:跨模态检索如此简单
  • M2LOrder开源镜像免配置:一键部署后自动创建systemd服务单元文件
  • 手把手教你用Chord视频分析工具:快速定位视频中的关键目标
  • 手把手教你用SeqGPT-560M快速提取合同关键信息
  • SenseVoice-small-onnx语音识别实战:短视频平台UGC内容审核
  • StructBERT新手必看:3步完成句子相似度对比
  • DeepSeek-OCR-2隐藏功能:图片转Markdown全解析
  • 通义千问1.5-1.8B-GPTQ-Int4部署教程:vLLM多模型服务托管与负载均衡配置
  • [特殊字符] mPLUG-Owl3-2B多模态应用案例:工业质检——PCB板缺陷图自动标注与归因分析
  • SenseVoice-small-onnx语音识别效果展示:韩语新闻播音高流利度转写实例