Python核心数据结构
1. List(列表):灵活的多面手
列表是 Python 中最常用的数据结构,就像一个可以随时增删改查的动态数组。
- 特性:有序(按添加顺序排列)、可变(随时可以修改元素)、允许重复。
- 适用场景:需要按顺序存储同类或不同类数据,且后续需要频繁修改数据的场景(如:待办事项列表、爬虫抓取的数据集)。
创建与核心操作
# 创建列表
my_list = [1, 2, "hello", 3.14, 1]
# 增加元素
my_list.append([3, 4]) # 在末尾追加,将列表 [3, 4] 作为单个元素添加,结果为:[1, 2, "hello", 3.14, 1, [3, 4]]
my_list.insert(1, "插入") # 在指定索引位置插入
my_list.extend([4, 5]) # 将另一个列表的元素拆散合并进来
# 删除元素
my_list.remove("hello") # 删除第一个匹配的元素
popped_item = my_list.pop() # 移除并返回最后一个元素
# 修改与查询
my_list[0] = 100 # 修改指定索引的值
print(my_list[1]) # 通过索引访问2. Tuple(元组):带锁的列表
元组和列表非常相似,但它一旦创建,里面的元素就不能被修改(Immutable)。
- 特性:有序、不可变、允许重复。
- 适用场景:存储不需要更改的数据(如:地理坐标经纬度、数据库查询返回的单条记录)。因为不可变,元组的内存占用比列表小,遍历速度稍快,且可以作为字典的 Key(键)。
创建与核心操作
# 创建元组
my_tuple = (1, 2, "hello", 1)
single_tuple = (1,) # 注意:只有一个元素的元组必须加逗号
# 访问元素 (与列表相同)
print(my_tuple[0]) # 输出: 1
# 核心方法 (因为不可变,所以只有查询方法)
print(my_tuple.count(1)) # 统计元素 1 出现的次数 (输出: 2)
print(my_tuple.index("hello")) # 查找元素的索引位置
"""
如果尝试修改,会抛出TypeError: 't = (1, 2, 3)
result = t[0] = 100 # 尝试修改
tuple' object does not support item assignment
"""
注意:虽然元组本身不可变,但如果元组里面包含可变对象(如列表),该列表内部的元素是可以修改的。
3. Dict(字典):高效的键值对
字典就像一本真正的字典,通过唯一的词条(Key)去快速查找对应的释义(Value)。
- 特性:键值对映射、可变、Key 必须唯一且不可变(如字符串、数字、元组)、Value 可以是任意类型。(注:Python 3.7+ 版本后,字典默认保留插入顺序)。
- 适用场景:需要通过特定标识符快速检索数据的场景(如:用户个人信息、配置参数存储、JSON数据处理)。
创建与核心操作
# 创建字典
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
# 增加/修改元素
my_dict["job"] = "Engineer" # 增加新键值对
my_dict["age"] = 26 # 修改已有键的值
# 删除元素
del my_dict["city"] # 删除键值对
age = my_dict.pop("age") # 移除并返回对应的值
# 查询元素
print(my_dict["name"]) # 可能会触发 KeyError 如果键不存在
print(my_dict.get("phone", "Not Found")) # 安全获取,不存在则返回默认值
# 遍历字典
for key, value in my_dict.items():
print(f"{key}: {value}")4. Set(集合):去重与数学运算利器
集合就像是一个没有 Value 的字典,它里面只存放独一无二的元素。
- 特性:无序(不支持索引)、可变、元素必须唯一且不可变。
- 适用场景:数据快速去重、测试成员是否属于某个群体、进行数学集合运算(交集、并集、差集)。
创建与核心操作
# 创建集合
my_set = {1, 2, 3, 3, 4} # 重复的 3 会被自动过滤,结果为 {1, 2, 3, 4}
empty_set = set() # 注意:空集合必须用 set(),不能用 {} (那是空字典)
# 增删元素
my_set.add(5) # 增加元素
my_set.remove(2) # 移除元素 (如果不存在会报错)
my_set.discard(10) # 移除元素 (不存在不会报错)
# 集合数学运算
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a | set_b) # 并集: {1, 2, 3, 4, 5} (也可用 set_a.union(set_b))
print(set_a & set_b) # 交集: {3} (也可用 set_a.intersection(set_b))
print(set_a - set_b) # 差集: {1, 2} (也可用 set_a.difference(set_b))综合对比总结
| 数据结构 | 符号 | 有序性 | 可变性 | 是否允许重复 | 核心优势 / 用途 |
|---|---|---|---|---|---|
| List (列表) | [] | 有序 | 可变 | 允许 | 灵活存储和操作一连串数据 |
| Tuple (元组) | () | 有序 | 不可变 | 允许 | 保护数据不被修改,比列表更省内存 |
| Dict (字典) | {} | 保持插入顺序 | 可变 | Key 唯一,Value 允许 | 极其快速的键值查找 (O(1) 复杂度) |
| Set (集合) | {} | 无序 | 可变 | 不允许 | 快速去重,强大的集合数学运算 |
评论 (0)