Python基础知识-数据结构篇

Python 提供了丰富且灵活的内置数据结构,用于高效地组织、存储和操作数据。这些数据结构可分为**可变(mutable)不可变(immutable)**两大类,并根据其特性适用于不同场景。

以下是 Python 中最核心的 6 种内置数据结构的详细介绍:


1. 列表(List) ------ 可变、有序、允许重复

特点:

  • 用方括号 [] 定义
  • 元素有序(有索引,从 0 开始)
  • 允许存储不同类型的数据(如整数、字符串、对象等)
  • 可变:支持增删改操作
  • 允许重复元素

常见操作:

python 复制代码
lst = [1, 'hello', 3.14, True]
lst.append('new')        # 添加元素
lst[0] = 100             # 修改
lst.insert(1, 'x')       # 在位置1插入
lst.pop()                # 删除并返回最后一个元素
lst.remove('hello')      # 删除第一个匹配项
len(lst)                 # 长度

适用场景:

  • 需要动态修改的数据集合
  • 保持元素插入顺序
  • 频繁按索引访问或遍历

⚠️ 注意:列表在头部插入/删除效率低(O(n)),此时可考虑 collections.deque


2. 元组(Tuple) ------ 不可变、有序、允许重复

特点:

  • 用圆括号 () 定义(也可省略)
  • 元素有序、可索引
  • 不可变:创建后不能修改内容
  • 允许重复、可包含不同类型

示例:

python 复制代码
tup = (1, 'a', 3.14)
# tup[0] = 10  # ❌ 报错!不可变
print(tup[1])  # 'a'

优势:

  • 比列表更节省内存
  • 可作为字典的键(因不可变)
  • 线程安全(无并发修改风险)

适用场景:

  • 表示固定结构的数据(如坐标 (x, y)、RGB 颜色)
  • 函数返回多个值
  • 用作字典键或集合元素

3. 字典(Dictionary) ------ 可变、无序(Python 3.7+ 保持插入顺序)、键唯一

特点:

  • 用花括号 {} 定义,格式为 {key: value}
  • 键必须是不可变类型(如 str、int、tuple)
  • 值可以是任意类型
  • 键唯一,重复赋值会覆盖旧值
  • Python 3.7 起,字典保持插入顺序

常见操作:

python 复制代码
d = {'name': 'Alice', 'age': 25}
d['city'] = 'Beijing'     # 添加/修改
print(d['name'])          # 访问
del d['age']              # 删除键值对
'name' in d               # 检查键是否存在
d.get('height', 0)        # 安全取值,不存在返回默认值

适用场景:

  • 映射关系(如配置项、缓存、JSON 数据)
  • 快速查找(平均 O(1) 时间复杂度)

4. 集合(Set) ------ 可变、无序、元素唯一

特点:

  • 用花括号 {} 定义(但空集合需用 set()
  • 元素无序、不重复
  • 元素必须是不可变类型(如数字、字符串、元组)
  • 支持数学集合运算(并、交、差、对称差)

示例:

python 复制代码
s = {1, 2, 3, 3}   # 自动去重 → {1, 2, 3}
s.add(4)
s.remove(1)
s.discard(10)      # 不存在也不报错

# 集合运算
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}

适用场景:

  • 去重(如 list(set(my_list))
  • 成员快速检测(x in my_set 比列表快得多)
  • 数学集合操作

💡 不可变集合:frozenset ------ 可作为字典键或嵌套在其他集合中


5. 字符串(String) ------ 不可变、有序、字符序列

特点:

  • 用单引号 ' ' 或双引号 " " 定义
  • 不可变:任何"修改"操作都会生成新字符串
  • 支持索引、切片、遍历
  • 是 Unicode 字符序列(Python 3 默认)

常见操作:

python 复制代码
s = "Hello"
s[0]        # 'H'
s.upper()   # 'HELLO'(返回新字符串)
'lo' in s   # True
s.split()   # 分割
''.join(['a','b'])  # 拼接

适用场景:

  • 文本处理、文件路径、用户输入等

6. 其他重要数据结构(来自标准库)

虽然不是"内置"关键字类型,但 Python 标准库提供了更专业的数据结构:

结构 所在模块 特点
deque collections 双端队列,两端高效插入/删除(O(1))
Counter collections 计数器,统计元素出现次数
defaultdict collections 带默认值的字典,避免 KeyError
namedtuple collections 带字段名的元组,可读性更强
OrderedDict collections 显式保持插入顺序(Python 3.7+ 普通 dict 已具备)
heapq heapq 最小堆实现,用于优先队列
array array 存储同类型基本数据,比列表更省内存

示例:Counter

python 复制代码
from collections import Counter
cnt = Counter(['a', 'b', 'a', 'c'])
print(cnt)  # Counter({'a': 2, 'b': 1, 'c': 1})

对比总结表

数据结构 可变? 有序? 允许重复? 典型用途
list 通用序列,动态数组
tuple 固定结构,函数返回值
dict ✅(3.7+) 键❌ / 值✅ 键值映射,快速查找
set 去重,成员检测,集合运算
str 文本处理
frozenset 不可变集合,可用作键

选择建议

  • 需要顺序 + 可修改list
  • 数据固定不变tuple
  • 需要键值对应dict
  • 只关心存在与否/去重set
  • 处理文本str
  • 高性能队列 → collections.deque
  • 统计频次 → collections.Counter

掌握这些数据结构及其特性,是写出高效、清晰 Python 代码的基础。

相关推荐
froginwe111 小时前
AJAX 实时搜索:技术原理与实现方法
开发语言
小智RE0-走在路上1 小时前
Python学习笔记(7)--集合,字典,数据容器总结
笔记·python·学习
沃斯堡&蓝鸟2 小时前
DAY 29 异常处理
python
发光小北2 小时前
SG-CAN (FD) NET-210(双通道 CAN (FD) 转以太网网关)特点与功能介绍
开发语言·网络·php
Direction_Wind2 小时前
抓包的使用与讲解
python
职业码农NO.12 小时前
智能体推理范式: Plan-and-Execute(规划与执行)
人工智能·python·数据分析·系统架构·知识图谱·agent·集成学习
dragoooon342 小时前
[C++——lesson32.数据结构进阶——「初识哈希」]
数据结构·c++·哈希算法
liangshanbo12152 小时前
深入理解 Model Context Protocol (MCP):从原理到实践
开发语言·qt·microsoft
爱笑的眼睛112 小时前
超越`cross_val_score`:深入剖析Scikit-learn交叉验证API的设计哲学与高阶实践
java·人工智能·python·ai