七、数据容器总结笔记
2026-02-20
Python基础
type
Post
status
Published
date
Feb 20, 2026
slug
python-data-containers-summary-notes-7
summary
每种容器都有自己的特点和适用场景。字符串、列表、元组、集合、字典——它们就像是不同的收纳工具,有的适合放文本,有的适合放有序数据,有的适合去重,有的适合存储键值对。理解它们的区别和联系,才能在实际编程中选择最合适的容器!
tags
Python数据存储容器
category
Python基础
icon
password
💡 学习感悟:每种容器都有自己的特点和适用场景。字符串、列表、元组、集合、字典——它们就像是不同的收纳工具,有的适合放文本,有的适合放有序数据,有的适合去重,有的适合存储键值对。理解它们的区别和联系,才能在实际编程中选择最合适的容器!
1. 数据容器总览
Python 中常用的数据容器有五种:
容器 | 英文 | 符号 | 核心特点 |
字符串 | str | "" / '' | 文本数据,不可变 |
列表 | list | [] | 有序可变,可重复 |
元组 | tuple | () | 有序不可变,可重复 |
集合 | set | {} | 无序不重复 |
字典 | dict | {} | 键值对存储,key 唯一 |
📝 我的理解:这五种容器就像是不同的收纳盒——
- 字符串是密封袋:装文本,内容不能改
- 列表是可变抽屉:可以增删改,东西按顺序放
- 元组是固定盒子:东西按顺序放,但不能改
- 集合是去重篮:东西乱放,重复的自动去掉
- 字典是标签柜:每个东西都有标签(key),通过标签找东西
2. 五大容器特性对比
2.1 完整特性对比表
特性 | 字符串(str) | 列表(list) | 元组(tuple) | 集合(set) | 字典(dict) |
有序性 | ✅ 有序 | ✅ 有序 | ✅ 有序 | ❌ 无序 | ✅ 有序(3.7+) |
重复元素 | ✅ 允许 | ✅ 允许 | ✅ 允许 | ❌ 不允许 | ⚠️ key不允许 |
可变性 | ❌ 不可变 | ✅ 可变 | ❌ 不可变 | ✅ 可变 | ✅ 可变 |
索引访问 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
切片操作 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
使用场景 | 文本处理 | 有序可重复数据集合 | 固定数据记录 | 去重数据集合 | 键值对映射 |
📝 我的理解:
- 有序性:能不能按顺序取出元素,能不能用索引访问
- 重复元素:能不能存相同的数据
- 可变性:创建后能不能修改内容
- 索引/切片:能不能用
[0]、[1:3]这样的方式访问
2.2 可视化对比
3. 各容器详细说明
3.1 字符串(str)
适用场景:存储和处理文本数据
📝 我的理解:字符串就像写好的便签——你可以看、可以复制、可以拼接新的便签,但不能直接修改便签上的字。要"修改"只能创建一个新的字符串。
3.2 列表(list)
适用场景:需要频繁增删改的有序数据集合
📝 我的理解:列表就像抽屉——东西按顺序放,可以随时拿出来、放进去、换位置。是最灵活的数据容器!
3.3 元组(tuple)
适用场景:存储固定不变的数据记录,如坐标、配置项
📝 我的理解:元组就像封好的档案袋——东西按顺序放好了,贴上封条不能改。适合存一些固定信息,比如一个人的姓名、年龄、性别。
3.4 集合(set)
适用场景:需要去重、集合运算的场景
📝 我的理解:集合就像去重篮——东西扔进去,重复的自动去掉,而且不讲究顺序。适合做"有没有"的判断和集合间的运算。
3.5 字典(dict)
适用场景:需要通过标签(key)快速查找数据的场景
📝 我的理解:字典就像带标签的收纳柜——每个东西都有标签(key),通过标签就能快速找到东西。标签不能重复,但东西(value)可以重复。
4. 选择容器的方法
4.1 决策流程图
4.2 快速选择指南
你的需求 | 推荐容器 | 原因 |
存一段文字 | 字符串 | 专门处理文本 |
存成绩列表,会增删 | 列表 | 可变、有序 |
存坐标点,固定不变 | 元组 | 不可变、有序 |
去重 | 集合 | 自动去重 |
通过学号查学生信息 | 字典 | 键值对映射 |
需要索引访问 | 字符串/列表/元组 | 支持索引和切片 |
5. 遇到的问题和解决
5.1 字符串不可变导致的困惑
⚠️ 踩坑记录:刚开始我总想把字符串当成列表来修改,结果一直报错。记住:字符串是不可变的!要"修改"只能创建新的字符串。
5.2 集合和字典都用 {}
⚠️ 踩坑记录:{}默认是字典!要创建空集合必须用set()。有元素的集合{1, 2, 3}和字典{"a": 1}写法不同,但空的时候要注意区分。
5.3 字典不能用索引访问
⚠️ 踩坑记录:字典是无序的(3.7+ 是有序的,但也不建议用索引),必须通过 key 访问。如果 key 不存在会报错,用get()方法更安全。
5.4 元组只有一个元素时的坑
⚠️ 踩坑记录:(1)会被当成数学运算的括号!单元素元组必须在元素后加逗号(1,),这才是真正的元组。
6. 核心知识点整理
6.1 容器特性速查表
容器 | 有序 | 可变 | 重复 | 索引 | 适用场景 |
字符串 | ✅ | ❌ | ✅ | ✅ | 文本 |
列表 | ✅ | ✅ | ✅ | ✅ | 可变序列 |
元组 | ✅ | ❌ | ✅ | ✅ | 固定记录 |
集合 | ❌ | ✅ | ❌ | ❌ | 去重/运算 |
字典 | ✅(3.7+) | ✅ | key❌ | ❌ | 键值映射 |
6.2 常用操作速查
操作 | 字符串 | 列表 | 元组 | 集合 | 字典 |
创建 | "abc" | [1,2] | (1,2)/1,2 | {1,2} | {"a":1} |
长度 | len() | len() | len() | len() | len() |
访问 | [索引] | [索引] | [索引] | 不支持 | [key] |
切片 | [start:end] | [start:end] | [start:end] | 不支持 | 不支持 |
添加 | 不可变 | append() | 不可变 | add() | dict[key]=val |
删除 | 不可变 | remove() | 不可变 | remove() | del dict[key] |
6.3 需要注意的
- 不确定用什么时,先用列表(最灵活)
- 数据固定不变时,用元组(更安全、更快)
- 需要去重时,用集合
- 需要通过标签查找时,用字典
- 处理文本时,用字符串
Loading...
