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

【Python精讲 03】Python核心容器:一篇通关序列(List, Tuple)、映射(Dict)与集合(Set)

【Python精讲 03】Python核心容器:一篇通关序列(List, Tuple)、映射(Dict)与集合(Set)

摘要:在上一篇中,我们掌握了变量、数字等“基本粒子”。现在,是时候学习如何将这些粒子组织起来了。本文将带你一篇通关Python中最核心的四大数据容器:列表(List)、元组(Tuple)、字典(Dict)和集合(Set)。我们将从它们的本质——序列、映射与集合——出发,让你彻底理解各自的特点与应用场景,学会为不同的数据选择最合适的“家”。

前言:从“砖块”到“墙壁”

如果说变量和基础数据类型是构建程序的“砖块”,那么容器就是用这些砖块砌成的“墙壁”与“房间”。它们是一种组织和存储多个数据的方式。在Python中,几乎所有的复杂数据都是由这四种基本容器或它们的变体构成的。

掌握它们,就等于掌握了Python数据结构的半壁江山。本文将摒弃零散的讲解,直接从它们的本质入手,让你形成一个清晰的知识框架。


一、序列 (Sequence):按顺序排列的数据

序列类型的核心特点是有序,其中的每一个元素都有一个唯一的、从0开始的整数索引。你可以像排队一样,通过号码(索引)精确地找到每一个人(元素)。

1.1 list (列表):灵活的“购物清单”

列表是Python中使用最频繁的容器,它是一个可变的(mutable)、有序的序列。

  • 特点:你可以随时向列表中添加、删除或修改元素,就像你可以随时更新你的购物清单一样。
  • 语法:用方括号 [] 定义,元素之间用逗号 , 分隔。
# 创建一个列表
fruits = ["apple", "banana", "cherry"]# 1. 访问元素 (通过索引)
print(f"第一个水果是: {fruits[0]}")  # 输出: 第一个水果是: apple
print(f"最后一个水果是: {fruits[-1]}") # 输出: 最后一个水果是: cherry# 2. 修改元素
fruits[1] = "blueberry"
print(f"修改后: {fruits}") # 输出: 修改后: ['apple', 'blueberry', 'cherry']# 3. 添加元素
fruits.append("orange")    # 在末尾添加
print(f"append后: {fruits}") # 输出: append后: ['apple', 'blueberry', 'cherry', 'orange']
fruits.insert(1, "grape")  # 在指定索引位置插入
print(f"insert后: {fruits}") # 输出: insert后: ['apple', 'grape', 'blueberry', 'cherry', 'orange']# 4. 删除元素
removed_fruit = fruits.pop(2) # 删除指定索引的元素并返回它
print(f"pop掉的水果是: {removed_fruit}, 列表变为: {fruits}") # pop掉的水果是: blueberry, 列表变为: ['apple', 'grape', 'cherry', 'orange']
fruits.remove("cherry")     # 直接删除指定的第一个匹配元素
print(f"remove后: {fruits}") # 输出: remove后: ['apple', 'grape', 'orange']# 5. 其他常用操作
print(f"列表长度: {len(fruits)}")      # 输出: 列表长度: 3
print(f"'apple'在列表中吗? {'apple' in fruits}") # 输出: 'apple'在列表中吗? True```##### **1.2 `tuple` (元组):不可变的“坐标点”**元组可以看作是一个**“上了锁”的列表**。它也是一个有序的序列,但它是**不可变的(immutable)***   **特点**:一旦创建,你就不能再修改元组中的任何元素。这使得元组非常适合存储那些不希望被意外改变的数据,比如坐标点 `(x, y)`、RGB颜色值 `(255, 0, 0)` 等。
*   **语法**:用圆括号 `()` 定义。```python
# 创建一个元组
point = (120, 30)# 1. 访问元素 (和列表一样)
print(f"X坐标: {point[0]}") # 输出: X坐标: 120# 2. 尝试修改 (会报错!)
# point[0] = 100  # 这行代码会触发 TypeError# 3. 元组的“拆包” (Unpacking)
x, y = point
print(f"通过拆包得到: x={x}, y={y}") # 输出: 通过拆包得到: x=120, y=30# 注意:只有一个元素的元组,末尾必须加一个逗号
single_tuple = (5,)
print(type(single_tuple)) # <class 'tuple'>
not_a_tuple = (5)
print(type(not_a_tuple))  # <class 'int'>

二、映射 (Mapping):高效的“通讯录”

映射类型的核心是键-值(key-value)对。它不通过索引,而是通过一个唯一的“键”来快速查找对应的“值”,就像通讯录里通过人名(键)来查找电话号码(值)一样。

2.1 dict (字典)

字典是Python中唯一的内置映射类型。它是可变的,并且在Python 3.7+版本中是有序的(按插入顺序)。

  • 特点:查询速度极快,非常适合存储需要通过唯一标识符查找的信息。键必须是不可变类型(如字符串、数字、元组)。
  • 语法:用花括号 {} 定义,键值对格式为 key: value
# 创建一个字典
student = {"name": "Alice","age": 25,"courses": ["Math", "English"]
}# 1. 访问元素 (通过键)
print(f"学生姓名: {student['name']}") # 输出: 学生姓名: Alice# 2. 安全的访问方式:get()方法
# 如果键不存在,直接用[]会报错,而get()会返回None或指定的默认值
print(f"学生的年级: {student.get('grade', '暂无')}") # 输出: 学生的年级: 暂无# 3. 添加或修改元素
student['grade'] = 4          # 添加新的键值对
student['age'] = 26           # 修改已有的键值
print(f"更新后: {student}")   # 输出: 更新后: {'name': 'Alice', 'age': 26, 'courses': ['Math', 'English'], 'grade': 4}# 4. 删除元素
del student['grade']
print(f"删除后: {student}")   # 输出: 删除后: {'name': 'Alice', 'age': 26, 'courses': ['Math', 'English']}# 5. 遍历字典 (极其常用)
# 遍历键
for key in student.keys():print(key)
# 遍历值
for value in student.values():print(value)
# 遍历键值对
for key, value in student.items():print(f"{key}: {value}")

三、集合 (Set):独特的“朋友圈”

集合是一个可变的无序的、且元素唯一不重复的容器。

  • 特点:两大核心用途——去重关系运算。就像一个朋友圈,里面每个人都是独一无二的,我们可以方便地计算共同好友、所有好友等。
  • 语法:用花括号 {} 定义,但它不是键值对。
# 创建集合 (注意:会自动去重)
tags = {"python", "data", "web", "python"}
print(f"集合: {tags}") # 输出: 集合: {'data', 'python', 'web'} (顺序可能不同)# 1. 添加和删除元素
tags.add("ai")
print(f"add后: {tags}")     # 输出: add后: {'data', 'ai', 'python', 'web'}
tags.remove("web")
print(f"remove后: {tags}") # 输出: remove后: {'data', 'ai', 'python'}# 2. 核心应用:关系运算
my_friends = {"Alice", "Bob", "Charlie"}
her_friends = {"Charlie", "David", "Eve"}# 交集 (&): 共同的好友
common_friends = my_friends & her_friends
print(f"共同好友: {common_friends}") # 输出: 共同好友: {'Charlie'}# 并集 (|): 所有的好友
all_friends = my_friends | her_friends
print(f"所有好友: {all_friends}")   # 输出: 所有好友: {'Alice', 'David', 'Bob', 'Charlie', 'Eve'}# 差集 (-): 只属于我的好友
my_only_friends = my_friends - her_friends
print(f"只属于我的好友: {my_only_friends}") # 输出: 只属于我的好友: {'Alice', 'Bob'}

四、四大容器横向对比
特性List (列表)Tuple (元组)Dict (字典)Set (集合)
定义语法[1, 2, 3](1, 2, 3){'a': 1, 'b': 2}{1, 2, 3}
可变性✅ 可变❌ 不可变✅ 可变✅ 可变
有序性✅ 有序✅ 有序✅ 有序 (3.7+)❌ 无序
唯一性❌ 元素可重复❌ 元素可重复✅ 键(Key)唯一✅ 元素唯一
典型场景存储需要增删改查的有序数据存储不希望被改变的有序数据存储需要快速查找的键值对数据元素去重、关系运算

总结

今天我们学习了Python中组织数据的四种核心方式。请牢记它们的本质:

  • 需要一个灵活、有序的列表?用 list
  • 需要一个安全、不可变的列表?用 tuple
  • 需要通过唯一的键快速查找信息?用 dict
  • 需要处理不重复的元素或进行关系运算?用 set

在编程中,根据你的数据和需求,选择最合适的容器,是写出高效、清晰代码的关键一步。

预告:【Python精讲 #04】逻辑的艺术:精通if条件判断与for/while循环控制

http://www.dtcms.com/a/392732.html

相关文章:

  • map_from_arrays和map_from_entries函数
  • 【EE初阶 - 网络原理】网络基本原理
  • 计算机毕设选题+技术栈选择推荐:基于Python的家教预约管理系统设计
  • 密码实现安全:形式化验证技术解析及主流工具实践
  • 并发编程的“造物主“函数——`pthread_create`
  • Python如何开发游戏
  • 新手向 算法 插入排序-yang
  • 2.0、机器学习-数据聚类与分群分析
  • 无痛c到c++
  • QTableWidget 控件入门
  • 【HarmonyOS】HMRouter配置与基本使用
  • 数据驱动下的实验设计与方差分析:从技术落地到方法论升维
  • 深度学习中的池化、线性层与激活函数
  • 【脑电分析系列】第22篇:EEG情绪识别与脑机接口(BCI)应用案例:机器学习与深度学习的实战
  • 深度学习知识点
  • 【pdf】如何将网页转换为pdf?
  • 家庭劳务智能机器人:从“科幻设想”到“推门而入”还有多远?
  • C++后台开发工具链实战
  • PortAudio--Cross-platform Open-Source Audio I/O Library
  • Oracle根据日期进行查询
  • 【C#】C# 中 `ProcessStartInfo` 详解:启动外部进程
  • Python快速入门专业版(三十六):Python列表基础:创建、增删改查与常用方法(15+案例)
  • 微服务项目->在线oj系统(Java-Spring)----5.0
  • 【读书笔记】《鲁迅传》
  • Python 基础:列表、字符串、字典和元组一些简单八股
  • C++ 运算符重载:类内与类外重载详解
  • 【java】jsp被截断问题
  • 在Windows10 Edge浏览器里安装DeepSider大模型插件来免费使用gpt-4o、NanoBanana等AI大模型
  • 车联网网络安全:技术演进与守护智能出行
  • 网络原理-传输层补充1