Python 的核心数据结构是内置的基础存储容器,设计简洁且功能强大,覆盖了绝大多数编程场景的需求。它们的核心特点是 “开箱即用、高效灵活”,主要包括 列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set),再加上基础的字符串(String),共同构成了 Python 数据处理的基石。
以下从 定义、核心特性、常用操作、适用场景 四个维度,详细介绍每个核心数据结构:
列表是 Python 最常用的数据结构,用于存储 有序、可修改 的元素集合,用方括号 [] 定义,元素之间用逗号分隔。
# 示例:存储不同类型的元素(Python 列表支持异构元素)
fruits = ["苹果", "香蕉", 100, True, 3.14]
nums = [1, 2, 3, 4, 5]操作 | 代码示例 | 功能说明 |
|---|---|---|
访问元素 | 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) |
元组是 有序、不可修改 的元素集合,用圆括号 () 定义(单个元素需加逗号,避免歧义)。
# 示例:存储固定不变的数据
coordinates = (10.0, 20.0) # 坐标(x,y)
person_info = ("小明", 25, "北京") # 个人信息(姓名、年龄、城市)
single_tuple = (5,) # 单个元素的元组(必须加逗号)操作 | 代码示例 | 功能说明 |
|---|---|---|
访问元素 | person_info[0] | 获取索引 0 的元素(输出:小明) |
切片(截取子元组) | person_info[1:] | 获取索引 1 及以后的元素(输出:(25, "北京")) |
统计元素出现次数 | (1,2,2,3).count(2) | 统计 2 出现的次数(输出:2) |
查找元素索引 | person_info.index("北京") | 查找元素的第一个索引(输出:2) |
name, age = func());字典是 无序(Python 3.7+ 后保证插入顺序)、键值对(key-value) 存储的容器,用大括号 {} 定义,键(key)唯一且不可变,值(value)可任意类型。
# 示例:存储键值映射关系的数据
student = {
"id": 101,
"name": "小红",
"score": 95,
"courses": ["数学", "英语"] # 值可以是列表等可变类型
}
empty_dict = {} # 空字典操作 | 代码示例 | 功能说明 |
|---|---|---|
访问值(按 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() | 清空所有键值对 |
集合是 无序、无重复元素 的容器,用大括号 {} 或 set() 函数定义(空集合必须用 set(),不能用 {},否则是字典)。
# 示例:存储唯一不重复的数据
tags = {"Python", "编程", "入门"} # 标签集合(自动去重)
nums = set([1, 2, 2, 3, 3, 3]) # 从列表创建集合(输出:{1,2,3})
empty_set = set() # 空集合操作 | 代码示例 | 功能说明 |
|---|---|---|
添加元素 | 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) |
in 操作效率远高于列表,如 if "Python" in tags)。字符串虽常被视为“文本类型”,但本质是 有序、不可变的字符集合,具备数据结构的核心特性,也是 Python 核心数据结构之一。
用单引号 ''、双引号 "" 或三引号 """ """(多行文本)定义。
name = "Python"
intro = '一门简洁的编程语言'
multi_line = """第一行
第二行
第三行""" # 多行字符串name[0] = "p" 会报错);+ 拼接、* 重复生成新字符串。操作 | 代码示例 | 功能说明 |
|---|---|---|
访问字符 | 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() | 转小写/大写 |
数据结构 | 有序性 | 可变性 | 元素唯一性 | 核心特点 | 适用场景 |
|---|---|---|---|---|---|
列表(List) | 是 | 是 | 否 | 万能容器,动态增减 | 有序修改、异构元素存储 |
元组(Tuple) | 是 | 否 | 否 | 安全高效,不可修改 | 固定数据、函数多返回值、字典键 |
字典(Dict) | 是(3.7+) | 是(值可变) | 键唯一 | 键值映射,查询高效 | 映射关系数据、JSON 类数据 |
集合(Set) | 否 | 是(元素可增删) | 是 | 自动去重,集合运算 | 数据去重、元素存在判断、集合运算 |
字符串(Str) | 是 | 否 | 否 | 文本处理,不可修改 | 文本存储、字符串格式化 |
in 操作)是 O(1)(哈希表实现),远高于列表、元组的 O(n);掌握这 5 种核心数据结构,就能应对 Python 80% 以上的开发场景,也是面试中高频考察的基础知识点。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 [email protected] 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 [email protected] 删除。