【Python基础】 一文搞懂 List, Tuple, Set, Dict 的核心区别与应用场景

Python 中有四大内置数据结构:列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)。它们长得有点像,但在底层实现、可变性、有序性以及应用场景上有着天壤之别。本文通过对比表格和代码示例,带你彻底掌握它们的选择逻辑。


1 四种数据类型的区别

特性 List (列表) Tuple (元组) Set (集合) Dictionary (字典)
符号 [ ] ( ) { } {key: value}
有序性 有序 有序 无序 Python 3.7+ 有序 (插入顺序)
可变性 可变 (Mutable) 不可变 (Immutable) 可变 (但元素必须不可变) 可变 (Key必须不可变)
重复元素 允许 允许 不允许 (自动去重) Key 不允许重复
查找速度 慢 (O(n)) 慢 (O(n)) 极快 (O(1)) 极快 (O(1))
主要用途 存储序列数据 存储不可变序列/记录 去重、数学集合运算 键值对映射、快速查找

1.1 List (列表)

关键词:有序、可变

列表是 Python 中最常用的数据结构。它可以容纳任意类型的对象,并且可以随时修改(增删改)。

  • 特点: 元素按插入顺序排列,支持索引(Indexing)和切片(Slicing)。
  • 常用操作: append, extend, pop, sort
# 定义列表
my_list = [1, "Hello", 3.14, [1, 2]]

# 修改元素
my_list[0] = 100 

# 追加元素
my_list.append("World")

print(my_list) 
# 输出: [100, 'Hello', 3.14, [1, 2], 'World']

1.2 Tuple (元组)

关键词:有序、不可变、安全

元组可以看作是“只读的列表”。一旦创建,其内部的元素就不能被修改、添加或删除。

  • 为什么用元组?
    1. 安全性: 保护数据不被意外修改。
    2. 性能: 比列表占用更少的内存,迭代速度略快。
    3. 可哈希: 因为不可变,所以元组可以作为字典的 Key(列表不行)。
# 定义元组
my_tuple = (1, 2, "Python")

# 尝试修改会报错
try:
    my_tuple[0] = 99
except TypeError as e:
    print(f"Error: {e}") 
    # 输出: Error: 'tuple' object does not support item assignment

# 单个元素的元组陷阱
single_tuple = (1,) # 必须加逗号,否则是 int 类型

1.3 Set (集合)

关键词:无序、唯一、数学运算

集合是一个无序的不重复元素序列。它的底层实现与字典类似(Hash Table),因此查找速度极快。

  • 核心功能: 自动去重。
  • 注意: 集合本身是可变的(可以 add/remove),但集合内的元素必须是不可变的(Hashable)。你不能在集合里放一个 List。
# 定义集合
my_set = {1, 2, 2, 3, 3, 3}
print(my_set) # 输出: {1, 2, 3} (自动去重)

# 集合运算
set_a = {1, 2, 3}
set_b = {3, 4, 5}

print(set_a & set_b) # 交集: {3}
print(set_a | set_b) # 并集: {1, 2, 3, 4, 5}
print(set_a - set_b) # 差集: {1, 2}

面试考点: 如何创建一个空集合?

  • s = {} ❌ (这是空字典)
  • s = set() ✅ (正确写法)

1.4 Dictionary (字典)

关键词:键值对、哈希表、极速查找

字典由 Key (键) 和 Value (值) 组成。它是通过 Key 来直接访问 Value,而不是通过索引位置。

  • Key 的限制: 必须是不可变类型(如字符串、数字、元组)。
  • Value 的限制: 无限制,可以是任何对象。
  • 性能: 无论数据量多大,通过 Key 查找 Value 的时间复杂度接近 O(1)。
# 定义字典
user_info = {
    "name": "Gemini",
    "age": 1,
    "skills": ["Coding", "Writing"]
}

# 快速查找
print(user_info["name"]) # 输出: Gemini

# 添加/修改
user_info["location"] = "Cloud"

# 获取所有键值对
for k, v in user_info.items():
    print(f"{k}: {v}")

2 选用建议

在实际开发中,请参考以下决策逻辑:

  1. 你需要存储“键值对”吗?
    • → \rightarrow Dictionary (例如:用户信息,配置项)
  2. 你需要数据去重,或者进行数学集合运算吗?
    • → \rightarrow Set (例如:计算共同好友,ID去重)
  3. 你需要数据是“只读”的,或者作为字典的Key吗?
    • → \rightarrow Tuple (例如:经纬度坐标,数据库查询结果的一行)
  4. 如果以上都不是,你需要一个有序、可变的容器:
    • → \rightarrow List (绝大多数常规场景,类似于 C/C++ 中的“数组”)

3 总结

  • List 是最灵活的数组(类似于 C/C++ 中的数组)。
  • Tuple 是不可变的数组,更轻量、更安全。
  • Set 是为了去重和数学运算而生的。
  • Dictionary 是为了通过 Key 快速检索数据而生的。

理解这四者的区别,能让你的 Python 代码写得更 Pythonic,运行效率更高!


希望这篇文章对你有帮助!欢迎在评论区留言讨论。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐