前言
在学习完字符串与数字类型之后,Python的「容器类型」是你通往进阶之路的必经之门。今天我们一起来系统梳理和掌握 列表(list)、元组(tuple)、range对象、集合(set/frozenset)以及字典(dict) 的核心用法和差异。
一、列表(list):灵活可变的万金油
列表是最常用的数据结构之一。它是一个有序、可变、可迭代的序列,适合存储同类项目集合。
🌟 核心特性:
- ✅ 可变(支持增删改)
- ✅ 有序(支持索引、切片)
- ✅ 支持存放任意类型
- ✅ 自动扩容缩容
🔧 创建方式(4种):
lst1 = [1, 2, 3] # 字面量
lst2 = list("abc") # 类型转换
lst3 = [x ** 2 for x in range(3)] # 推导式
lst4 = list(range(3)) # 构造器
📚 常用操作:
| 操作 | 方法 | 示例 |
|---|---|---|
| 末尾添加 | append() | lst.append(4) |
| 插入元素 | insert(index, val) | lst.insert(1, 'a') |
| 合并列表 | extend() | lst.extend([5,6]) |
| 删除元素 | remove() / pop() | lst.remove(2) or pop(0) |
| 排序 | sort() | lst.sort(key=len, reverse=True) |
| 遍历 | for i in lst: |
二、元组(tuple):一旦定型不可更改
元组不可变,指的是它保存的元素引用不能被替换,并不保证元素本身不可变。例如元组里放一个列表,列表仍可追加元素。这也解释了为什么不是每个元组都能作为字典键:还要看里面的元素是否可哈希。
元组是不可变的有序序列,通常用于表示一个不可更改的数据集。
🌟 核心特性:
- ❌ 不可变(不支持增删改)
- ✅ 有序(支持索引、切片)
- ✅ 支持解包
- ✅ 可作为 dict 的 key(可哈希)
🛠 创建方式:
t1 = (1, 2, 3)
t2 = (1,) # 单元素必须加逗号
t3 = tuple("abc")
🎯 高级用法:解包 & 命名元组
x, y = (10, 20) # 基础解包
*a, b = [1, 2, 3, 4] # 星号收集
命名元组(namedtuple)让你像对象一样访问元组字段:
from collections import namedtuple
Person = namedtuple("Person", ["name", "age"])
p = Person("Alice", 30)
print(p.name) # 输出 Alice
三、range 对象:高效生成整数序列
range() 用于生成等差整数序列,常用于循环中。
🔧 三种写法:
range(5) # 0 到 4
range(1, 5) # 1 到 4
range(1, 10, 2) # 步长为 2
🚀 特点:
- ✅ 不可变
- ✅ 惰性求值,节省内存
- ✅ 支持索引、切片
四、集合(set & frozenset):无重复、无序的数据集
集合是 Python 中的无序不重复元素集合,常用于去重、集合运算等。
✅ set:可变集合
s = {1, 2, 3}
s.add(4)
s.remove(1)
支持交集(&)、并集(|)、差集(-)等集合运算。
❄️ frozenset:不可变集合
fs = frozenset([1, 2, 3])
适合用于需要不可变集合的场景,比如作为 dict 的键。
五、字典(dict):Python 最强大的数据结构
字典是一种键值对映射结构,是非常强大且灵活的容器类型。
🔑 创建方式:
d1 = {"name": "Alice", "age": 25}
d2 = dict(name="Bob", age=30)
d3 = dict(zip(["a", "b"], [1, 2]))
✨ 常用操作:
| 操作 | 示例 |
|---|---|
| 增 / 改 | d["key"] = value |
| 删除 | pop("key") / del d["key"] |
| 获取值 | d.get("key", default) |
| 遍历 | for k, v in d.items(): |
| 视图对象 | keys(), values(), items() |
📌 延伸理解:赋值与存储是一回事
当我们写下如下代码:
hashmap[num] = index
这不仅是”让 num 对应的值等于 index”,更是将这个键值对存入字典的操作。
它相当于:
# 如果 num 是 7,index 是 3:
hashmap = {7: 3}
也就是说:Python 字典的 [] 赋值语句(dict[key] = value)是一个同时实现”添加或更新”的操作。
因此:
- 它”等于索引”是值的语义
- 它”被存入字典”是结构的行为
这种写法在算法题(如 twoSum)中非常常见,也是字典作为映射结构的精髓所在。
🧠 总结:五类数据类型一览对比
| 特性 | list | tuple | range | set | dict |
|---|---|---|---|---|---|
| 可变 | ✅ | ❌ | ❌ | ✅ | ✅ |
| 有序 | ✅ | ✅ | ✅ | ❌ | ✅(3.7+) |
| 可迭代 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 可哈希 | ❌ | ✅ | ✅ | ❌ | ❌ |
| 典型用途 | 存放集合 | 多值封装 | 循环序列 | 去重 | 映射键值 |
写在最后
掌握好这些基本数据类型,是深入学习 Python 的起点。它们不仅是日常开发的基石,也在算法、数据处理、Web 开发、机器学习等场景中频繁出现。
🧪 建议大家动手多写、多调试,多用 type()、id()、dir() 等工具感受每种类型的行为,才能真正做到灵活运用!
如果你觉得这篇文章对你有帮助,欢迎点赞 ⭐、收藏 📁、评论 💬~
你还想看我写哪一部分的 Python 知识?欢迎留言告诉我!
💬 评论
这套方案在哪一步卡住了?也欢迎补充你的实现方式或踩坑经验。