跳到主要内容

Python 有哪些内置数据结构?

总览​

数据结构语法有序可变允许重复可哈希
list 列表[1, 2, 3]✅✅✅❌
tuple 元组(1, 2, 3)✅❌✅✅
dict 字典{"a": 1}✅(3.7+)✅键唯一❌
set 集合{1, 2, 3}❌✅❌❌
frozenset 冻结集合frozenset({1,2})❌❌❌✅
str 字符串"hello"✅❌✅✅
bytes 字节串b"hello"✅❌✅✅

list 列表​

有序、可变、允许重复,最常用的序列类型。

lst = [1, "hello", 3.14, True]

lst.append(5) # 末尾追加
lst.insert(1, "new") # 指定位置插入
lst.pop() # 删除末尾
lst.pop(0) # 删除指定索引
lst.remove("hello") # 删除第一个匹配值
lst.sort() # 原地排序
lst[0:2] # 切片

print(len(lst)) # 长度
print(3.14 in lst) # 成员检查

时间复杂度:

操作复杂度
索引访问 lst[i]O(1)
末尾追加 appendO(1) 均摊
中间插入/删除O(n)
搜索 inO(n)

tuple 元组​

有序、不可变,适合存储固定记录,可作字典键。

point = (3, 4)
rgb = (255, 128, 0)

x, y = point # 解包
print(point[0]) # 索引访问
print(point.count(3)) # 计数
print(point.index(4)) # 查找索引

dict 字典​

键值对映射,键唯一,Python 3.7+ 保持插入顺序。

d = {"name": "Alice", "age": 25}

d["city"] = "Beijing" # 添加/更新
d.get("height", 170) # 安全获取,默认值 170
d.pop("age") # 删除键
d.update({"age": 26}) # 批量更新

for k, v in d.items(): # 遍历键值对
print(k, v)

print("name" in d) # 键存在检查

时间复杂度:

操作复杂度
查找/插入/删除O(1) 均摊
遍历O(n)

常用技巧:

# 字典推导式
squares = {x: x**2 for x in range(5)}

# defaultdict:键不存在时自动初始化
from collections import defaultdict
dd = defaultdict(list)
dd["a"].append(1) # 不会 KeyError

# Counter:计数器
from collections import Counter
c = Counter("abracadabra")
print(c.most_common(3)) # [('a', 5), ('b', 2), ('r', 2)]

set 集合​

无序、元素唯一,适合去重和集合运算。

s = {1, 2, 3, 2, 1}
print(s) # {1, 2, 3} ← 自动去重

s.add(4)
s.discard(10) # 删除不存在的元素不报错
s.remove(1) # 删除不存在的元素会报 KeyError

a = {1, 2, 3}
b = {2, 3, 4}

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

时间复杂度:

操作复杂度
添加/删除/查找O(1) 均摊
集合运算(并/交/差)O(n)

frozenset 冻结集合​

不可变的集合,可作字典键或放入其他集合。

fs = frozenset({1, 2, 3})
print(fs & frozenset({2, 3, 4})) # {2, 3}

d = {frozenset({1, 2}): "pair"} # 可作字典键

str 字符串​

不可变的字符序列,支持丰富的文本处理方法。

s = "Hello, Python!"

s.upper() # 大写
s.lower() # 小写
s.strip() # 去除首尾空白
s.split(", ") # 分割 → ['Hello', 'Python!']
", ".join(["a", "b"]) # 拼接 → 'a, b'
s.replace("Python", "World")
s.startswith("Hello")
s.find("Python") # 返回索引,不存在返回 -1
f"名字: {'Alice'}" # f-string 格式化

bytes 字节串​

不可变的字节序列,用于网络传输、文件 I/O 等二进制场景。

b = b"hello"
b2 = "你好".encode("utf-8") # str → bytes
s = b2.decode("utf-8") # bytes → str
print(b[0]) # 104(整数)

选型建议​

需求推荐结构
有序、可增删的同类数据list
固定记录、函数多返回值tuple
键值映射、快速查找dict
去重、集合运算set
需要哈希的集合(作字典键)frozenset
文本处理str
二进制数据bytes

总结​

Python 内置 7 种核心数据结构,覆盖序列、映射、集合三大类别:

  • 序列(有序):list、tuple、str、bytes
  • 映射:dict
  • 集合(无序唯一):set、frozenset

复杂场景可使用 collections 模块的增强版本:deque、defaultdict、OrderedDict、Counter、namedtuple 等。