核心数据结构
约 1537 字大约 5 分钟
2026-02-04
Python 提供 4 种内置核心数据结构,用于存储多个数据,各有特点和适用场景,是 Python 开发的核心基础,必须熟练掌握。
列表(List):可变、有序的元素集合
- 标识:用方括号 [] 定义,元素之间用逗号分隔;
- 特点:可变(可增、删、改元素)、有序(元素有固定顺序,可通过索引访问);
- 元素:可存储任意类型数据(int、str、bool、甚至列表等),许重复元素;
- 适用场景:需要频繁修改、有序的数据集(如学生成绩列表、商品列表)。
核心操作示例
# 1. 定义列表
nums = [1, 2, 3, 4, 5] # 同类型元素
info = ["张三", 18, 95.5, True] # 不同类型元素
empty_list = [] # 空列表
# 2. 索引访问(从0开始,反向索引从-1开始)
print(nums[0]) # 第一个元素,输出:1
print(nums[-1]) # 最后一个元素,输出:5
print(info[1]) # 输出:18
# 3. 修改元素(可变的核心体现)
nums[0] = 100
print(nums) # 输出:[100, 2, 3, 4, 5]
# 4. 增删元素(常用方法)
nums.append(6) # 末尾添加元素,输出:[100,2,3,4,5,6]
nums.insert(2, 200) # 索引2处插入200,输出:[100,2,200,3,4,5,6]
nums.pop() # 删除末尾元素,输出:[100,2,200,3,4,5]
nums.remove(200) # 删除指定值的元素,输出:[100,2,3,4,5]
# 5. 常用其他方法
print(len(nums)) # 获取长度,输出:5
print(nums.index(3)) # 查找元素索引,输出:2
print(nums.count(2)) # 统计元素出现次数,输出:1
nums.sort() # 排序(默认升序)
print(nums) # 输出:[2, 3, 4, 5, 100]元组(Tuple):不可变、有序的元素集合
- 标识:用圆括号 ()定义,元素之间用逗号分隔(单个元素需加逗号,如(1,),否则为普通变量);
- 特点:不可变(定义后不能增、删、改元素)、有序(可通过索引访问);
- 元素:可存储任意类型数据,允许重复元素;
- 适用场景:无需修改、需要保证数据安全的数据集(如坐标 (10,20)、配置参数)。
核心操作示例
# 1. 定义元组
nums = (1, 2, 3, 4)
single = (5,) # 单个元素必须加逗号,否则是int类型
empty = () # 空元组
# 2. 索引访问(和列表一致)
print(nums[0]) # 输出:1
print(nums[-1]) # 输出:4
# 3. 不可变:修改/删除元素会报错(核心特点)
# nums[0] = 100 # 报错:TypeError
# nums.pop() # 报错:TypeError
# 4. 常用方法(只有查询相关,无修改方法)
print(len(nums)) # 获取长度,输出:4
print(nums.index(3)) # 查找索引,输出:2
print(nums.count(2)) # 统计次数,输出:1
# 5. 元组转列表(如需修改,可先转列表)
nums_list = list(nums)
nums_list[0] = 100
print(nums_list) # 输出:[100,2,3,4]字典(Dictionary):键值对、无序(3.7 + 有序)的集合
- 标识:用大括号 {} 定义,格式为{键1:值1, 键2:值2,...};
- 核心:键(key) 和值(value) 一一对应,通过键访问值(而非索引);
- 特点:键唯一且不可变(只能是 int/str/tuple,不能是列表),值可变且可重复(任意类型);
- 适用场景:存储有映射关系的数据集(如用户信息、商品属性)。
核心操作示例
# 1. 定义字典
user = {
"name": "张三",
"age": 18,
"score": 95.5,
"is_student": True
}
empty_dict = {} # 空字典
# 2. 访问值:通过键访问,支持[]或get()(推荐get(),避免键不存在报错)
print(user["name"]) # 输出:张三
print(user.get("age")) # 输出:18
print(user.get("gender", "男")) # 键不存在时返回默认值,输出:男
# 3. 修改/添加元素(通过键赋值,存在则修改,不存在则添加)
user["age"] = 20 # 修改已有键的值
user["gender"] = "男" # 添加新的键值对
print(user) # 输出:{'name':'张三','age':20,'score':95.5,'is_student':True,'gender':'男'}
# 4. 删除元素
del user["score"] # 删除指定键值对
user.pop("is_student") # 删除指定键值对(推荐)
print(user) # 输出:{'name':'张三','age':20,'gender':'男'}
# 5. 常用方法
print(len(user)) # 获取键值对个数,输出:3
print(user.keys()) # 获取所有键,输出:dict_keys(['name','age','gender'])
print(user.values()) # 获取所有值,输出:dict_values(['张三',20,'男'])
print(user.items()) # 获取所有键值对,输出:dict_items([('name','张三'),('age',20),('gender','男')])集合(Set):无序、不重复的元素集合
- 标识:用 大括号 {} 定义(注意:空集合必须用
set(),而非{},{}是空字典); - 特点:无序(无索引,不能通过索引访问)、元素唯一(自动去重);
- 元素:必须是不可变类型(int/str/tuple,不能是列表 / 字典);
- 适用场景:去重、集合运算(交集、并集、差集,如查找两个列表的共同元素)。
核心操作示例
# 1. 定义集合(自动去重)
nums = {1, 2, 2, 3, 3, 3} # 重复元素自动去重
s = set([4,5,6,6]) # 通过列表转集合,实现去重
empty_set = set() # 空集合(必须用set())
# error = {} # 这是空字典,不是空集合
print(nums) # 输出:{1,2,3}
print(s) # 输出:{4,5,6}
# 2. 增删元素
nums.add(4) # 添加元素,输出:{1,2,3,4}
nums.update([5,6]) # 批量添加,输出:{1,2,3,4,5,6}
nums.remove(6) # 删除指定元素(元素不存在报错)
nums.discard(7) # 删除指定元素(元素不存在不报错,推荐)
print(nums) # 输出:{1,2,3,4,5}
# 3. 集合运算(核心优势)
a = {1,2,3,4}
b = {3,4,5,6}
print(a & b) # 交集(共同元素),输出:{3,4}
print(a | b) # 并集(所有元素,去重),输出:{1,2,3,4,5,6}
print(a - b) # 差集(a有b没有),输出:{1,2}
print(a ^ b) # 对称差集(互不相同的元素),输出:{1,2,5,6}
# 4. 常用方法
print(len(nums)) # 获取元素个数,输出:5
print(3 in nums) # 判断元素是否存在,输出:True四大数据结构核心对比
| 结构 | 标识 | 是否可变 | 是否有序 | 访问方式 | 元素唯一性 | 核心适用场景 |
|---|---|---|---|---|---|---|
| 列表 | [] | 是 | 是 | 索引 | 允许重复 | 有序、需修改的数据集 |
| 元组 | () | 否 | 是 | 索引 | 允许重复 | 有序、无需修改的安全数据集 |
| 字典 | {} | 是 | 3.7 + 是 | 键 | 键唯一、值可重复 | 键值映射关系的数据集 |
| 集合 | {}/set() | 是 | 否 | 无索引 | 元素唯一 | 去重、集合运算 |
