news 2026/5/25 19:53:58

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/5/25 18:58:39

Langchain-Chatchat结合FastAPI构建高性能后端

Langchain-Chatchat 结合 FastAPI 构建高性能后端 在企业智能化升级的浪潮中,一个现实问题日益凸显:员工每天要面对堆积如山的内部文档——HR政策、IT操作手册、财务报销流程……而真正需要时,却总是“翻了半天找不到”。与此同时&#xff0c…

作者头像 李华
网站建设 2026/5/26 6:58:04

Langchain-Chatchat实现科研资料智能问答的可行性分析

Langchain-Chatchat实现科研资料智能问答的可行性分析 在现代科研环境中,知识的积累速度远超个体消化能力。一个课题组几年内可能产出上百份研究报告、实验记录和文献综述,而新成员往往需要数月时间才能“读懂”团队的历史脉络。更棘手的是,关…

作者头像 李华
网站建设 2026/5/25 15:38:55

Langchain-Chatchat如何动态调整检索top-k值?

Langchain-Chatchat如何动态调整检索top-k值? 在构建企业级本地知识库问答系统时,一个常被低估但极具影响的细节浮出水面:该返回多少条检索结果? 这个问题看似简单——不就是设置个 top-k3 或 k5 就完事了吗?但在真实…

作者头像 李华
网站建设 2026/5/26 2:43:00

Langchain-Chatchat常见报错解决方案汇总大全

Langchain-Chatchat常见报错解决方案汇总大全 在企业知识管理、智能客服和私有化部署的浪潮中,基于大模型的知识问答系统正成为核心技术支柱。然而,通用云端模型难以满足金融、医疗等行业对数据隐私的严苛要求——文档上传即风险,信息外泄无从…

作者头像 李华
网站建设 2026/5/25 11:52:36

Langchain-Chatchat实现多文档交叉引用回答的机制

Langchain-Chatchat 实现多文档交叉引用回答的机制 在企业知识管理日益复杂的今天,一个常见的挑战是:如何让AI准确回答“项目A的预算和负责人是谁?”这类问题——它看似简单,但答案可能分散在《年度财务报告》和《组织架构调整通知…

作者头像 李华
网站建设 2026/5/26 6:36:49

Langchain-Chatchat支持多种文档格式的智能解析方法详解

Langchain-Chatchat支持多种文档格式的智能解析方法详解 在企业知识管理日益复杂的今天,如何让散落在各个角落的PDF、Word和TXT文档真正“活”起来,成为员工随时可调用的智能助手?这不仅是技术挑战,更是组织效率变革的关键。尤其在…

作者头像 李华