一、前言

对于有 C/C++ 基础的同学来说,Python 的四种基础容器——列表(list)集合(set)元组(tuple)字典(dict)——是入门中最关键的部分。
它们与 C++ 的 std::vectorstd::unordered_setstd::tuplestd::map/std::unordered_map 有相似之处,但同时具备更灵活的语法与动态特性。

本文将从语法、特性和对比角度深入讲解这四种容器,帮助你快速掌握 Python 的核心数据结构。


二、列表(list)

1. 概念

列表是一个有序、**可修改(可变)**的序列,类似 C++ 的 std::vector
它可以存放任意类型的元素,甚至可以在同一个列表中混合多种类型。

2. 创建与基本操作

# 创建列表
nums = [10, 20, 30, 40]

# 访问元素
print(nums[0])     # 输出 10
print(nums[-1])    # 输出 40,负索引表示从后往前数

# 修改元素
nums[1] = 99

# 添加元素
nums.append(50)        # 尾部添加
nums.insert(1, 15)     # 在索引 1 处插入

# 删除元素
nums.pop()             # 删除并返回最后一个元素
nums.remove(99)        # 按值删除第一个出现的 99
del nums[0]            # 按索引删除

# 遍历
for x in nums:
    print(x)

3. 常用函数与切片

nums = [1, 2, 3, 4]
print(len(nums))       # 长度
print(sum(nums))       # 求和
print(max(nums))       # 最大值
print(sorted(nums))    # 排序,不改变原列表

# 切片操作(非常强大)
print(nums[1:3])       # 左闭右开打印区间 [2, 3]
print(nums[::-1])      # 反转 [4, 3, 2, 1]

4. 特点总结

  • 支持随机访问与下标操作。
  • 可以动态增长或缩减。
  • 支持多种便捷操作(append、insert、pop、切片等)。
  • 常用于需要频繁修改或遍历的有序数据。

三、集合(set)

1. 概念

集合是一个无序元素唯一的容器,类似 C++ 的 std::unordered_set
常用于去重、集合运算等场景。

2. 基本用法

# 创建集合
s = {1, 2, 3, 3, 2}
print(s)  # 输出 {1, 2, 3} 自动去重

# 添加与删除
s.add(4)
s.discard(2)
s.remove(3)   # 若元素不存在会报错,discard 不会
s.clear()     # 清空集合

3. 集合运算

a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)   # 并集 {1, 2, 3, 4, 5}
print(a & b)   # 交集 {3}
print(a - b)   # 差集 {1, 2}
print(a ^ b)   # 对称差集 {1, 2, 4, 5}

4. 特点总结

  • 无序,不支持索引访问。
  • 元素自动去重。
  • 集合运算非常简洁高效。
  • 常用于快速判断成员关系或数据去重。

四、元组(tuple)

1. 概念

元组是一个**有序但不可修改(不可变)**的序列。
它类似 C++ 的 std::tupleconst std::vector
常用于“函数多返回值”、“键不可变的映射”等场景。

2. 基本用法

# 创建元组
t = (1, 2, 3)
print(t[0])  # 输出 1

# 不可修改
# t[1] = 10  # 报错:TypeError

# 元组解包
x, y, z = t
print(x, y, z)  # 输出 1 2 3

# 单元素元组要加逗号
single = (1,)

3. 特点总结

  • 与列表类似,但内容不可修改。
  • 占用内存更少,访问速度略快。
  • 常用于固定结构的数据或函数返回值。

五、字典(dict)

1. 概念

字典是一种键值对(key-value)映射结构,类似 C++ 的 std::unordered_mapstd::map
在 Python 中,字典几乎无处不在,是最常用的数据结构之一。

2. 基本操作

# 创建字典
person = {"name": "Alice", "age": 20, "city": "Beijing"}

# 访问与修改
print(person["name"])   # 输出 Alice
person["age"] = 21      # 修改
person["gender"] = "F"  # 新增键值对

# 删除
del person["city"]

# 遍历
for key, value in person.items():
    print(key, value)

# 判断键是否存在
if "age" in person:
    print("存在")

# 获取默认值(避免KeyError)
print(person.get("height", "not found"))

3. 特点总结

  • 键必须唯一且不可变(常用字符串或数字作为键)。
  • 值可以是任意类型。
  • 从 Python 3.7 开始,字典默认保持插入顺序。
  • 是实现配置、数据结构、对象属性等的基础工具。

六、对比总结表

类型是否有序是否可变是否允许重复常见符号类似 C++ 容器
list✅ 有序✅ 可变✅ 允许[]std::vector
tuple✅ 有序❌ 不可变✅ 允许()std::tuple
set❌ 无序✅ 可变❌ 唯一{}set()std::unordered_set
dict✅(Python 3.7+)✅ 可变键唯一{}std::unordered_map

七、学习建议(针对 C/C++ 程序员)

  1. 优先掌握 list 与 dict:它们在 Python 中使用最频繁。

  2. 理解可变与不可变的概念,这对写函数、拷贝数据非常重要。

  3. 充分利用 Python 的动态特性,例如:

    • 切片 a[::2]
    • 解包 x, y, z = t
    • 字典推导 {k: v for k, v in items}
  4. 学会用 for-in 遍历容器,Python 不需要手动控制索引。


八、结语

Python 的这四种基础容器是理解更高层数据结构(如列表推导、生成器、类、Pandas DataFrame 等)的关键。
从 C++ 过渡到 Python,会明显感受到语言在抽象层次与灵活性上的提升。
掌握它们,就等于掌握了 Python 编程的“地基”。


免责声明
本文内容仅供学习与参考,作者不对因使用本文示例代码所产生的任何后果负责。

封面图来源于网络,如有侵权,请联系删除!

更多推荐