列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)的区别
列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)的区别
ShiroRikka我系统地整理了 Python 中四种核心的数据结构:列表(List)、元组(Tuple)、集合(Set) 和 字典(Dictionary) 的区别。我们将从以下几个维度进行对比:
🧩 一、基本定义
数据结构 | 定义 |
---|---|
List(列表) | 有序、可变的元素序列,允许重复元素。 |
Tuple(元组) | 有序、不可变的元素序列,允许重复元素。 |
Set(集合) | 无序、不重复的元素集合,可变(set 类型),不可哈希。 |
Dictionary(字典) | 无序的键值对(key-value)集合,键必须唯一且不可变,值可变。 |
📊 二、特性对比表
特性 | List | Tuple | Set | Dictionary |
---|---|---|---|---|
有序性 | ✅ 有序 | ✅ 有序 | ❌ 无序 | ⚠️ |
可变性 | ✅ 可变 | ❌ 不可变 | ✅ 可变 | ✅ 可变 |
元素是否可重复 | ✅ 允许重复 | ✅ 允许重复 | ❌ 不允许重复 | 键 ❌ 重复 值 ✅ 可重复 |
索引访问 | ✅ list[0] |
✅ tuple[0] |
❌ 不支持索引 | ❌ 不支持索引 |
通过键访问 | ❌ | ❌ | ❌ | ✅ dict['key'] |
哈希性(能否作为字典的键) | ❌ 不可哈希 | ✅ 若元素都可哈希 | ❌ 不可哈希 | ❌ 不可哈希 |
语法表示 | [1, 2, 3] |
(1, 2, 3) 或 1, 2, 3 |
{1, 2, 3} |
{'a': 1, 'b': 2} |
空值表示 | [] 或 list() |
() 或 tuple() |
set() |
{} 或 dict() |
🛠 三、常用操作对比
操作 | List | Tuple | Set | Dictionary |
---|---|---|---|---|
创建 | lst = [1,2,3] |
tup = (1,2,3) |
s = {1,2,3} 或 set([1,2,3]) |
d = {'a':1} 或 dict(a=1) |
添加元素 | lst.append(x) lst.insert(i,x) |
❌ 不可变 | s.add(x) |
d['key'] = value |
删除元素 | lst.remove(x) del lst[i] |
❌ 不可变 | s.remove(x) s.discard(x) |
del d['key'] d.pop('key') |
遍历 | for x in lst: |
for x in tup: |
for x in s: |
for k in d: for k,v in d.items(): |
成员检测 | x in lst (慢) |
x in tup (慢) |
x in s (快) |
k in d (快) |
合并 | lst1 + lst2 lst.extend(lst2) |
tup1 + tup2 |
s1 |
s2 或 s1.union(s2) |
🔍 四、使用场景建议(工程角度)
数据结构 | 适用场景 |
---|---|
List | - 需要有序存储数据 - 需要频繁增删改元素 - 存储同类型元素的序列(如日志、任务队列) |
Tuple | - 表示固定结构的数据(如坐标 (x,y) 、RGB 颜色 (r,g,b) )- 用作字典的键(如 (日期, 用户ID) 作为复合键)- 函数返回多个值: return name, age, city |
Set | - 去重:unique = list(set(lst)) - 集合运算:交集、并集、差集(如用户权限对比) - 快速成员判断(如黑名单、白名单) |
Dictionary | - 映射关系:如配置、JSON 数据解析 - 缓存键值对(如 memoization) - 统计频次: count[word] += 1 |
⚠️ 五、注意事项(踩坑提醒)
空集合不能用
{}
{}
是空字典!创建空集合要用set()
。元组的不可变性是浅层的
1
2t = ([1, 2], 3)
t[0].append(3) # 合法!元组本身没变,但内部列表变了字典的键必须是可哈希的
列表、字典、集合不能做键;元组可以,只要其元素都可哈希。集合中的元素必须可哈希
所以你不能把列表放进集合里:{[1,2], [3,4]}
会报错。字典在遍历时不能修改
遍历中删除键会出错,应使用list(d.keys())
创建副本。
✅ 六、一句话总结
- List:有序可变数组,最常用。
- Tuple:固定结构、轻量级“记录”,可做键。
- Set:高效去重和集合运算。
- Dictionary:键值映射,实现哈希表逻辑。
如果你正在设计一个系统,比如用户权限管理系统,我可以举例说明如何组合使用它们:
1 | # 用户角色(元组表示固定结构) |
Comment
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果