首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >介绍一下Python的核心数据结构

介绍一下Python的核心数据结构

原创
作者头像
程序员老彭
发布2025-11-14 08:52:44
发布2025-11-14 08:52:44
2520
举报
文章被收录于专栏:Java开发Java开发

Python 的核心数据结构是内置的基础存储容器,设计简洁且功能强大,覆盖了绝大多数编程场景的需求。它们的核心特点是 “开箱即用、高效灵活”,主要包括 列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set),再加上基础的字符串(String),共同构成了 Python 数据处理的基石。

以下从 定义、核心特性、常用操作、适用场景 四个维度,详细介绍每个核心数据结构:

一、列表(List):有序可变的“万能容器”

1. 定义与外观

列表是 Python 最常用的数据结构,用于存储 有序、可修改 的元素集合,用方括号 ​​[]​​ 定义,元素之间用逗号分隔。

代码语言:javascript
复制
# 示例:存储不同类型的元素(Python 列表支持异构元素)
fruits = ["苹果", "香蕉", 100, True, 3.14]
nums = [1, 2, 3, 4, 5]
2. 核心特性
  • 有序性:元素按插入顺序排列,支持通过索引(下标)访问(索引从 0 开始);
  • 可变性:可动态添加、删除、修改元素(不创建新列表,直接修改原容器);
  • 异构性:可存储不同类型的元素(字符串、数字、布尔值、甚至其他列表);
  • 可重复:允许存储重复元素。
3. 常用操作(高频)

操作

代码示例

功能说明

访问元素

​​fruits[0]​​

获取索引 0 的元素(输出:苹果)

切片(截取子列表)

​​nums[1:4]​​

获取索引 1~3 的元素(输出:[2,3,4])

添加元素(末尾)

​​fruits.append("橙子")​​

末尾添加元素(列表长度+1)

插入元素(指定位置)

​​fruits.insert(1, "梨")​​

在索引 1 处插入元素

删除元素(按值)

​​fruits.remove(100)​​

删除第一个匹配的值

删除元素(按索引)

​​del fruits[2]​​

删除索引 2 的元素

反转列表

​​nums.reverse()​​

原地反转列表(输出:[5,4,3,2,1])

排序

​​nums.sort()​​

原地升序排序(默认),​​sort(reverse=True)​​ 降序

统计元素出现次数

​​nums.count(3)​​

统计 3 出现的次数(输出:1)

4. 适用场景
  • 存储需要按顺序访问、频繁修改的数据(如购物车商品、任务列表);
  • 临时存储多个异构元素(如接口返回的混合类型数据);
  • 需要动态增减元素的场景(如用户输入的多条数据)。

二、元组(Tuple):有序不可变的“安全容器”

1. 定义与外观

元组是 有序、不可修改 的元素集合,用圆括号 ​​()​​ 定义(单个元素需加逗号,避免歧义)。

代码语言:javascript
复制
# 示例:存储固定不变的数据
coordinates = (10.0, 20.0)  # 坐标(x,y)
person_info = ("小明", 25, "北京")  # 个人信息(姓名、年龄、城市)
single_tuple = (5,)  # 单个元素的元组(必须加逗号)
2. 核心特性
  • 有序性:与列表一致,支持索引访问和切片;
  • 不可变性:创建后无法添加、删除、修改元素(若元素是可变类型如列表,可修改元素内部值,但元组结构不变);
  • 异构性:支持存储不同类型元素;
  • 可重复:允许重复元素;
  • 轻量高效:比列表占用内存更少,访问速度更快。
3. 常用操作(高频)

操作

代码示例

功能说明

访问元素

​​person_info[0]​​

获取索引 0 的元素(输出:小明)

切片(截取子元组)

​​person_info[1:]​​

获取索引 1 及以后的元素(输出:(25, "北京"))

统计元素出现次数

​​(1,2,2,3).count(2)​​

统计 2 出现的次数(输出:2)

查找元素索引

​​person_info.index("北京")​​

查找元素的第一个索引(输出:2)

4. 适用场景
  • 存储固定不变的数据(如坐标、配置参数、常量);
  • 函数返回多个值(本质是返回元组,可解构赋值:​​name, age = func()​​);
  • 作为字典的键(元组不可变,列表不可作为字典键);
  • 需要数据安全性的场景(避免误修改核心数据)。

三、字典(Dictionary):无序键值对的“映射容器”

1. 定义与外观

字典是 无序(Python 3.7+ 后保证插入顺序)、键值对(key-value) 存储的容器,用大括号 ​​{}​​ 定义,键(key)唯一且不可变,值(value)可任意类型。

代码语言:javascript
复制
# 示例:存储键值映射关系的数据
student = {
    "id": 101,
    "name": "小红",
    "score": 95,
    "courses": ["数学", "英语"]  # 值可以是列表等可变类型
}
empty_dict = {}  # 空字典
2. 核心特性
  • 映射性:通过唯一的 key 快速查找 value(查询效率远高于列表);
  • 键不可变:key 必须是不可变类型(字符串、数字、元组),不能是列表、字典等可变类型;
  • 值可任意:value 可以是任意类型(包括字典、列表等可变类型);
  • 键唯一:重复的 key 会被覆盖(后定义的生效)。
3. 常用操作(高频)

操作

代码示例

功能说明

访问值(按 key)

​​student["name"]​​

获取 key 为 "name" 的值(输出:小红)

安全访问值

​​student.get("gender", "未知")​​

无 key 时返回默认值(输出:未知)

添加/修改键值对

​​student["gender"] = "女"​​

有 key 则修改,无 key 则添加

删除键值对

​​del student["courses"]​​

删除 key 为 "courses" 的键值对

获取所有 key

​​student.keys()​​

返回所有 key 的视图(输出:dict_keys(['id','name','score','gender']))

获取所有 value

​​student.values()​​

返回所有 value 的视图

获取所有键值对

​​student.items()​​

返回所有 (key, value) 元组(遍历常用)

清空字典

​​student.clear()​​

清空所有键值对

4. 适用场景
  • 存储具有映射关系的数据(如用户信息、配置项、接口返回的 JSON 数据);
  • 需要快速通过 key 查询数据的场景(如根据 ID 查找用户);
  • 存储多维度数据(如商品的名称、价格、库存等属性)。

四、集合(Set):无序唯一的“去重容器”

1. 定义与外观

集合是 无序、无重复元素 的容器,用大括号 ​​{}​​ 或 ​​set()​​ 函数定义(空集合必须用 ​​set()​​,不能用 ​​{}​​,否则是字典)。

代码语言:javascript
复制
# 示例:存储唯一不重复的数据
tags = {"Python", "编程", "入门"}  # 标签集合(自动去重)
nums = set([1, 2, 2, 3, 3, 3])    # 从列表创建集合(输出:{1,2,3})
empty_set = set()  # 空集合
2. 核心特性
  • 唯一性:自动去除重复元素(创建时即去重);
  • 无序性:无固定顺序,不支持索引访问和切片;
  • 元素不可变:集合中的元素必须是不可变类型(字符串、数字、元组),不能是列表、字典等可变类型;
  • 支持集合运算:交集、并集、差集等(类似数学中的集合操作)。
3. 常用操作(高频)

操作

代码示例

功能说明

添加元素

​​tags.add("学习")​​

添加元素(已存在则不生效)

删除元素(存在则删)

​​tags.remove("编程")​​

删除元素(不存在则报错)

安全删除元素

​​tags.discard("Java")​​

删除元素(不存在则不报错)

交集(共同元素)

​​{1,2,3} & {2,3,4}​​

输出:{2,3}(等价于 ​​set1.intersection(set2)​​)

并集(所有元素)

`{1,2,3}

{2,3,4}`

差集(独有元素)

​​{1,2,3} - {2,3,4}​​

输出:{1}(等价于 ​​set1.difference(set2)​​)

对称差集(互不相同)

​​{1,2,3} ^ {2,3,4}​​

输出:{1,4}(等价于 ​​set1.symmetric_difference(set2)​​)

判断子集

​​{2,3}.issubset({1,2,3})​​

判断是否是子集(输出:True)

4. 适用场景
  • 数据去重(如用户输入的重复标签、列表中的重复元素);
  • 集合运算(如查找两个列表的共同元素、筛选独有元素);
  • 快速判断元素是否存在(​​in​​ 操作效率远高于列表,如 ​​if "Python" in tags​​)。

五、字符串(String):有序不可变的“文本容器”

字符串虽常被视为“文本类型”,但本质是 有序、不可变的字符集合,具备数据结构的核心特性,也是 Python 核心数据结构之一。

1. 定义与外观

用单引号 ​​''​​、双引号 ​​""​​ 或三引号 ​​""" """​​(多行文本)定义。

代码语言:javascript
复制
name = "Python"
intro = '一门简洁的编程语言'
multi_line = """第一行
第二行
第三行"""  # 多行字符串
2. 核心特性
  • 有序性:支持索引访问和切片(类似列表、元组);
  • 不可变性:创建后无法修改单个字符(如 ​​name[0] = "p"​​ 会报错);
  • 可拼接/重复:通过 ​​+​​ 拼接、​​*​​ 重复生成新字符串。
3. 常用操作(高频)

操作

代码示例

功能说明

访问字符

​​name[2]​​

获取索引 2 的字符(输出:t)

切片

​​name[1:4]​​

获取索引 1~3 的字符(输出:yth)

拼接字符串

​​name + " 入门"​​

拼接生成新字符串(输出:Python 入门)

重复字符串

​​name * 2​​

重复 2 次(输出:PythonPython)

查找子串

​​name.find("tho")​​

查找子串索引(输出:2,不存在返回 -1)

替换子串

​​name.replace("Python", "Java")​​

替换子串(输出:Java)

分割字符串

​​"a,b,c".split(",")​​

按分隔符分割(输出:['a','b','c'])

去除首尾空格

​​" hello ".strip()​​

去除首尾空格(输出:hello)

大小写转换

​​name.lower()​​​/​​upper()​​

转小写/大写

4. 适用场景
  • 存储和处理文本数据(如用户输入、文件内容、接口返回的文本);
  • 字符串格式化(如拼接用户信息、生成 SQL 语句)。

六、核心数据结构对比表(面试高频)

数据结构

有序性

可变性

元素唯一性

核心特点

适用场景

列表(List)

万能容器,动态增减

有序修改、异构元素存储

元组(Tuple)

安全高效,不可修改

固定数据、函数多返回值、字典键

字典(Dict)

是(3.7+)

是(值可变)

键唯一

键值映射,查询高效

映射关系数据、JSON 类数据

集合(Set)

是(元素可增删)

自动去重,集合运算

数据去重、元素存在判断、集合运算

字符串(Str)

文本处理,不可修改

文本存储、字符串格式化

七、核心总结(入门+面试重点)

  1. 有序 vs 无序:列表、元组、字符串是有序(支持索引/切片);集合是无序(不支持索引);字典 3.7+ 后有序,之前无序;
  2. 可变 vs 不可变:列表、字典、集合是可变(可修改元素);元组、字符串是不可变(创建后无法修改);
  3. 查询效率:字典、集合的查询效率(​​in​​ 操作)是 O(1)(哈希表实现),远高于列表、元组的 O(n);
  4. 选型原则
  • 需有序修改 → 列表;
  • 需有序不可修改 → 元组;
  • 需键值映射 → 字典;
  • 需去重/集合运算 → 集合;
  • 需处理文本 → 字符串。

掌握这 5 种核心数据结构,就能应对 Python 80% 以上的开发场景,也是面试中高频考察的基础知识点。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 [email protected] 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 [email protected] 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、列表(List):有序可变的“万能容器”
    • 1. 定义与外观
    • 2. 核心特性
    • 3. 常用操作(高频)
    • 4. 适用场景
  • 二、元组(Tuple):有序不可变的“安全容器”
    • 1. 定义与外观
    • 2. 核心特性
    • 3. 常用操作(高频)
    • 4. 适用场景
  • 三、字典(Dictionary):无序键值对的“映射容器”
    • 1. 定义与外观
    • 2. 核心特性
    • 3. 常用操作(高频)
    • 4. 适用场景
  • 四、集合(Set):无序唯一的“去重容器”
    • 1. 定义与外观
    • 2. 核心特性
    • 3. 常用操作(高频)
    • 4. 适用场景
  • 五、字符串(String):有序不可变的“文本容器”
    • 1. 定义与外观
    • 2. 核心特性
    • 3. 常用操作(高频)
    • 4. 适用场景
  • 六、核心数据结构对比表(面试高频)
  • 七、核心总结(入门+面试重点)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档