news 2026/6/10 17:16:06

Python基础知识-数据结构篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础知识-数据结构篇

Python 提供了丰富且灵活的内置数据结构,用于高效地组织、存储和操作数据。这些数据结构可分为**可变(mutable)不可变(immutable)**两大类,并根据其特性适用于不同场景。

以下是 Python 中最核心的6 种内置数据结构的详细介绍:


1.列表(List)—— 可变、有序、允许重复

特点:

  • 用方括号[]定义
  • 元素有序(有索引,从 0 开始)
  • 允许存储不同类型的数据(如整数、字符串、对象等)
  • 可变:支持增删改操作
  • 允许重复元素

常见操作:

lst=[1,'hello',3.14,True]lst.append('new')# 添加元素lst[0]=100# 修改lst.insert(1,'x')# 在位置1插入lst.pop()# 删除并返回最后一个元素lst.remove('hello')# 删除第一个匹配项len(lst)# 长度

适用场景:

  • 需要动态修改的数据集合
  • 保持元素插入顺序
  • 频繁按索引访问或遍历

⚠️ 注意:列表在头部插入/删除效率低(O(n)),此时可考虑collections.deque


2.元组(Tuple)—— 不可变、有序、允许重复

特点:

  • 用圆括号()定义(也可省略)
  • 元素有序、可索引
  • 不可变:创建后不能修改内容
  • 允许重复、可包含不同类型

示例:

tup=(1,'a',3.14)# tup[0] = 10 # ❌ 报错!不可变print(tup[1])# 'a'

优势:

  • 比列表更节省内存
  • 可作为字典的键(因不可变)
  • 线程安全(无并发修改风险)

适用场景:

  • 表示固定结构的数据(如坐标(x, y)、RGB 颜色)
  • 函数返回多个值
  • 用作字典键或集合元素

3.字典(Dictionary)—— 可变、无序(Python 3.7+ 保持插入顺序)、键唯一

特点:

  • 用花括号{}定义,格式为{key: value}
  • 键必须是不可变类型(如 str、int、tuple)
  • 值可以是任意类型
  • 键唯一,重复赋值会覆盖旧值
  • Python 3.7 起,字典保持插入顺序

常见操作:

d={'name':'Alice','age':25}d['city']='Beijing'# 添加/修改print(d['name'])# 访问deld['age']# 删除键值对'name'ind# 检查键是否存在d.get('height',0)# 安全取值,不存在返回默认值

适用场景:

  • 映射关系(如配置项、缓存、JSON 数据)
  • 快速查找(平均 O(1) 时间复杂度)

4.集合(Set)—— 可变、无序、元素唯一

特点:

  • 用花括号{}定义(但空集合需用set()
  • 元素无序、不重复
  • 元素必须是不可变类型(如数字、字符串、元组)
  • 支持数学集合运算(并、交、差、对称差)

示例:

s={1,2,3,3}# 自动去重 → {1, 2, 3}s.add(4)s.remove(1)s.discard(10)# 不存在也不报错# 集合运算a={1,2,3}b={3,4,5}print(a|b)# 并集 → {1,2,3,4,5}print(a&b)# 交集 → {3}print(a-b)# 差集 → {1,2}

适用场景:

  • 去重(如list(set(my_list))
  • 成员快速检测(x in my_set比列表快得多)
  • 数学集合操作

💡 不可变集合:frozenset—— 可作为字典键或嵌套在其他集合中


5.字符串(String)—— 不可变、有序、字符序列

特点:

  • 用单引号' '或双引号" "定义
  • 不可变:任何“修改”操作都会生成新字符串
  • 支持索引、切片、遍历
  • 是 Unicode 字符序列(Python 3 默认)

常见操作:

s="Hello"s[0]# 'H's.upper()# 'HELLO'(返回新字符串)'lo'ins# Trues.split()# 分割''.join(['a','b'])# 拼接

适用场景:

  • 文本处理、文件路径、用户输入等

6.其他重要数据结构(来自标准库)

虽然不是“内置”关键字类型,但 Python 标准库提供了更专业的数据结构:

结构所在模块特点
dequecollections双端队列,两端高效插入/删除(O(1))
Countercollections计数器,统计元素出现次数
defaultdictcollections带默认值的字典,避免 KeyError
namedtuplecollections带字段名的元组,可读性更强
OrderedDictcollections显式保持插入顺序(Python 3.7+ 普通 dict 已具备)
heapqheapq最小堆实现,用于优先队列
arrayarray存储同类型基本数据,比列表更省内存

示例:Counter

fromcollectionsimportCounter cnt=Counter(['a','b','a','c'])print(cnt)# Counter({'a': 2, 'b': 1, 'c': 1})

对比总结表

数据结构可变?有序?允许重复?典型用途
list通用序列,动态数组
tuple固定结构,函数返回值
dict✅(3.7+)键❌ / 值✅键值映射,快速查找
set去重,成员检测,集合运算
str文本处理
frozenset不可变集合,可用作键

选择建议

  • 需要顺序 + 可修改list
  • 数据固定不变tuple
  • 需要键值对应dict
  • 只关心存在与否/去重set
  • 处理文本str
  • 高性能队列 →collections.deque
  • 统计频次 →collections.Counter

掌握这些数据结构及其特性,是写出高效、清晰 Python 代码的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 23:18:17

基础IP协议知识

网络层最主要的协议就是IP协议,IP协议最主要的工作有两个一个地址管理,使用IP地址这个概念,标识网络上某个设备的位置二是路由选择,在两个通信节点之间选一个合适的路径IP协议的数据报四位版本这里主要使用的是IPV4和IPV6&#xf…

作者头像 李华
网站建设 2026/6/10 8:17:18

47、打造应用过渡效果:从简单到通用的实现之旅

打造应用过渡效果:从简单到通用的实现之旅 1. 增添简单过渡效果 在开发应用程序时,合理运用过渡效果能够显著提升用户与应用的交互体验,但需注意避免过度使用。WPF 在处理过渡效果方面表现出色,不过有时明确告知 WPF 具体需求并非易事。 为了给应用增添一些趣味性,我们…

作者头像 李华
网站建设 2026/6/10 10:43:19

美团Java面试被问:Redis集群模式的工作原理

一、Redis 集群模式全景 1. 集群模式对比 text Redis 高可用方案演进: ├── 主从复制(Replication) ├── 哨兵模式(Sentinel) └── 集群模式(Cluster)⭐ 主流方案集群模式特点&#xff…

作者头像 李华
网站建设 2026/6/10 10:40:38

22、量子力学中的自旋角动量:概念、实验与数学表达

量子力学中的自旋角动量:概念、实验与数学表达 1. 自旋角动量的基本概念 在量子力学的世界里,除了轨道角动量,还有一种独特的角动量——自旋角动量。与轨道角动量不同,自旋角动量无法用空间坐标来描述,它代表了电子的固有磁矩,即电子即使完全孤立于空间中也拥有的磁矩,…

作者头像 李华
网站建设 2026/6/10 10:08:01

Langchain-Chatchat结合Chroma/FAISS实现高效语义检索

Langchain-Chatchat 结合 Chroma 与 FAISS:构建高效私有化语义检索系统 在企业知识管理的智能化浪潮中,一个核心痛点始终存在:如何让大语言模型真正“理解”公司内部那些 PDF 手册、Word 制度文件和 Excel 表格里的专有信息?通用 …

作者头像 李华
网站建设 2026/6/10 14:32:11

Langchain-Chatchat构建企业制度智能查询系统实例

Langchain-Chatchat构建企业制度智能查询系统实例 在现代企业中,制度文件往往分散在多个部门、存储于不同格式的文档之中——PDF、Word、甚至纸质归档。新员工入职时面对厚厚的《员工手册》无从下手;HR被重复的“年假怎么休”问题困扰;管理层…

作者头像 李华