Python核心容器类型教程:列表、字典、元组、集合用法与实战

容器类型是Python处理数据的核心工具,掌握列表(List)、字典(Dict)、元组(Tuple)、集合(Set)这四类核心容器,能让你高效存储、遍历、操作数据——从简单的数据分析到复杂的业务逻辑开发,都离不开这些基础容器的灵活运用。本文从实战角度拆解四类容器的用法、区别和适用场景,解决新手「该用哪种容器」「怎么高效操作」的核心问题。

一、先理清:四类核心容器的核心定位

不同容器有不同的设计初衷,先明确各自的核心用途,避免用错场景:

容器类型 核心特征 核心用途 可变性
列表(List) 有序、可重复、索引访问 存储有序数据(如用户列表、成绩列表) 可变(可增删改)
字典(Dict) 键值对、无序(3.7+有序)、键唯一 存储关联数据(如用户信息、配置项) 可变(可增删改键值对)
元组(Tuple) 有序、可重复、索引访问 存储不可修改的固定数据(如坐标、常量) 不可变
集合(Set) 无序、不可重复、哈希存储 去重、交集/并集等集合运算(如用户去重) 可变(但元素不可变)

二、列表(List):有序可变的「数据序列」

列表是Python最常用的容器,用[]定义,支持索引、切片、增删改查,适合存储有序且需要频繁修改的数据。

1. 基础定义与访问

 定义列表(可存储不同类型数据,建议统一类型)
score_list = [90, 85, 95, 88]
user_list = ["张三", "李四", "王五"]

 索引访问(正索引从0开始,负索引从-1开始)
print(score_list[0])   输出:90(第一个元素)
print(user_list[-1])   输出:王五(最后一个元素)

 切片:获取子列表(左闭右开)
print(score_list[1:3])   输出:[85, 95](索引1到2)
print(score_list[:2])    输出:[90, 85](前2个元素)

2. 核心操作:增删改查

 1. 新增元素
score_list.append(92)   末尾添加:[90, 85, 95, 88, 92]
score_list.insert(1, 89)   索引1处插入:[90, 89, 85, 95, 88, 92]

 2. 修改元素
score_list[2] = 86   索引2的值改为86:[90, 89, 86, 95, 88, 92]

 3. 删除元素
score_list.remove(95)   删除指定值:[90, 89, 86, 88, 92]
del score_list[-1]      删除索引-1的元素:[90, 89, 86, 88]
score_list.pop()        弹出末尾元素:[90, 89, 86]

 4. 查找元素
print(89 in score_list)   输出:True(判断是否存在)
print(score_list.index(89))   输出:1(返回索引)

3. 实用技巧:列表推导式(简化创建)

 生成1-10的偶数列表
even_list = [x for x in range(1, 11) if x % 2 == 0]
print(even_list)   输出:[2, 4, 6, 8, 10]

三、字典(Dict):键值对的「关联数据存储」

字典用{键:值}定义,键(Key)唯一且不可变(字符串、数字、元组),值(Value)可任意,适合存储「名称-值」关联的数据,比如用户信息、商品属性。

1. 基础定义与访问

 定义字典
user_info = {
    "name": "张三",
    "age": 28,
    "city": "北京",
    "score": [90, 85]   值可以是列表
}

 访问值(通过键)
print(user_info["name"])   输出:张三
print(user_info.get("age"))   输出:28(推荐,键不存在时返回None)

 键不存在时的处理
print(user_info.get("gender", "未知"))   输出:未知(指定默认值)

2. 核心操作:增删改查

 1. 新增/修改键值对(键存在则修改,不存在则新增)
user_info["gender"] = "男"   新增:{"name":"张三", ..., "gender":"男"}
user_info["age"] = 29        修改:age变为29

 2. 删除键值对
del user_info["score"]   删除score键
user_info.pop("city")    弹出city键,返回值:"北京"

 3. 遍历字典
 遍历键
for key in user_info.keys():
    print(key)   输出:name, age, gender

 遍历值
for value in user_info.values():
    print(value)   输出:张三, 29, 男

 遍历键值对(最常用)
for key, value in user_info.items():
    print(f"{key}:{value}")

3. 实用技巧:字典推导式

 将两个列表转为字典(姓名-成绩)
names = ["张三", "李四"]
scores = [90, 85]
score_dict = {name: score for name, score in zip(names, scores)}
print(score_dict)   输出:{"张三":90, "李四":85}

四、元组(Tuple):不可变的「固定数据序列」

元组用()定义(也可省略括号),有序且不可修改,适合存储不需要变更的固定数据,比如坐标、函数返回多个值。

1. 基础定义与访问

 定义元组
point = (10, 20)   坐标
color = "红", "绿", "蓝"   省略括号

 访问(和列表一样,索引/切片)
print(point[0])   输出:10
print(color[:2])   输出:('红', '绿')

 不可变特性(修改会报错)
 point[0] = 15   报错:TypeError: 'tuple' object does not support item assignment

2. 核心用途

 1. 函数返回多个值(本质是元组)
def get_num():
    return 1, 2, 3

a, b, c = get_num()   解包,a=1, b=2, c=3

 2. 作为字典的键(列表不行,元组可以)
dict_with_tuple_key = {
    (1, 2): "坐标1",
    (3, 4): "坐标2"
}

五、集合(Set):无序去重的「数据集合」

集合用{}set()定义,元素唯一且不可变,支持交集、并集、差集等集合运算,核心用途是去重和数据对比。

1. 基础定义与去重

 定义集合(自动去重)
num_set = {1, 2, 2, 3, 3, 3}
print(num_set)   输出:{1, 2, 3}

 列表去重(转集合再转列表)
repeat_list = [1, 2, 2, 3]
unique_list = list(set(repeat_list))
print(unique_list)   输出:[1, 2, 3](顺序可能变化)

2. 核心操作:集合运算

 定义两个集合
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

 并集(a或b中的元素)
print(a | b)   输出:{1, 2, 3, 4, 5, 6}

 交集(a和b都有的元素)
print(a & b)   输出:{3, 4}

 差集(a有b没有的元素)
print(a - b)   输出:{1, 2}

 新增/删除元素
a.add(5)   新增:{1,2,3,4,5}
a.remove(2)   删除:{1,3,4,5}(元素不存在报错)
a.discard(6)   删除:无报错(元素不存在时)

六、四类容器的核心区别与选型建议

场景需求 推荐容器 原因
存储有序、需修改的数据 列表 有序、可变,支持增删改查
存储关联数据(名称-值) 字典 键值对关联,按键快速查找
存储固定、不可修改的数据 元组 不可变,更安全,占用内存少
数据去重、集合运算 集合 自动去重,支持交并差运算

七、常见错误与解决方法

错误现象 根本原因 解决方法
KeyError: 'xxx' 访问字典不存在的键 改用dict.get(key, 默认值)
TypeError: 'tuple' object does not support item assignment 修改元组元素 元组不可变,需修改则转为列表(list(tuple)
TypeError: unhashable type: 'list' 用列表作为字典键/集合元素 换成元组(tuple(list)
集合去重后顺序混乱 集合无序 需保留顺序则用列表+遍历去重([x for i, x in enumerate(lst) if x not in lst[:i]]

八、实战案例:组合使用容器

 存储多个学生信息(列表+字典)
students = [
    {
        "name": "张三",
        "age": 28,
        "scores": {"语文": 90, "数学": 85}
    },
    {
        "name": "李四",
        "age": 27,
        "scores": {"语文": 88, "数学": 92}
    }
]

 遍历并打印每个学生的数学成绩
for student in students:
    print(f"{student['name']} 数学成绩:{student['scores']['数学']}")
 输出:
 张三 数学成绩:85
 李四 数学成绩:92
posted @ 2025-12-08 21:22  哈希技术  阅读(6)  评论(0)    收藏  举报