当前位置: 首页 > news >正文

Python容器类型差异操作

Python中提供了多种内置容器类型,用于存储和组织数据。其中最常用的是列表(list)字典(dict)集合(set),它们各有特点,适用于不同的场景。除此之外,Python标准库还提供了许多其他有用的容器类型,如元组、数组、双端队列等。下面我们将详细说明它们的差异、支持的操作,并给出代码示例。


一、列表、字典、集合的差异

类型是否有序是否可变元素是否唯一访问方式典型用途
列表(list)有序(插入顺序)可变可重复整数索引存储序列数据,支持增删改查
字典(dict)有序(Python 3.7+)可变键唯一,值可重复键(key)存储键值对映射关系
集合(set)无序可变唯一无索引,只能遍历或成员测试去重、集合运算(并交差)

示例

# 列表lst=[1,2,3,2]# 有序,允许重复print(lst[0])# 通过索引访问 → 1# 字典dct={'a':1,'b':2}# 键值对,键唯一print(dct['a'])# 通过键访问 → 1# 集合st={1,2,3,2}# 自动去重 → {1, 2, 3}print(2inst)# 成员测试 → True

二、类似的其他容器类型

除了上述三种,Python还提供了以下常用容器(部分位于collections模块):

类型特点示例
元组(tuple)有序、不可变、可重复t = (1, 2, 3)
数组(array)同类型元素,更节省内存from array import array; a = array('i', [1, 2, 3])
双端队列(deque)两端高效插入/弹出from collections import deque; dq = deque([1, 2, 3])
命名元组(namedtuple)类似元组,但字段可命名from collections import namedtuple; Point = namedtuple('Point', ['x', 'y']); p = Point(1, 2)
有序字典(OrderedDict)记住插入顺序(内置dict已有序,但OrderedDict提供额外方法)from collections import OrderedDict; od = OrderedDict()
默认字典(defaultdict)访问不存在的键时返回默认值from collections import defaultdict; dd = defaultdict(int)
计数器(Counter)字典子类,用于计数from collections import Counter; c = Counter('abracadabra')
链映射(ChainMap)将多个字典逻辑合并为一个from collections import ChainMap
用户列表/字典/字符串(UserList等)方便继承并自定义行为from collections import UserList

三、支持的操作详解(增删改查、运算及其他)

1. 列表(list)

  • append()extend()insert()+(拼接)
  • remove()pop()delclear()
  • :直接索引赋值lst[i] = new_value
  • :索引访问、切片、inindex()count()
  • 运算
    • +:拼接列表[1,2] + [3,4][1,2,3,4]
    • *:重复列表[1,2] * 3[1,2,1,2,1,2]
    • 比较:==<(按字典序比较)
  • 其他len()max()min()sorted()、列表推导式、reverse()sort()copy()
lst=[1,2]lst.append(3)# [1,2,3]lst.insert(1,99)# [1,99,2,3]lst.remove(2)# [1,99,3]popped=lst.pop()# popped=3, lst=[1,99]lst[0]=100# [100,99]print(100inlst)# Trueprint(lst+[5,6])# [100,99,5,6]print(lst*2)# [100,99,100,99]

2. 字典(dict)

  • 增/改d[key] = valueupdate()setdefault()
  • del d[key]pop(key)popitem()clear()
  • d[key](键不存在会报错)、get(key, default)inkeys()values()items()
  • 运算
    • Python 3.9+:|合并字典{1:'a'} | {2:'b'}{1:'a', 2:'b'}
    • |=更新字典
  • 其他len()、字典推导式、copy()fromkeys()
d={'a':1,'b':2}d['c']=3# 增 → {'a':1, 'b':2, 'c':3}d['a']=100# 改 → {'a':100, 'b':2, 'c':3}deld['b']# 删 → {'a':100, 'c':3}print(d.get('x',0))# 查(不存在返回0)→ 0print('a'ind)# Trueprint(d.keys())# dict_keys(['a', 'c'])# 合并(Python 3.9+)d2=d|{'d':4}# {'a':100, 'c':3, 'd':4}

3. 集合(set)

  • add()update()(可添加多个)
  • remove()(元素不存在报错)、discard()(不报错)、pop()(随机弹出一个)、clear()
  • inisdisjoint()issubset()
  • 运算
    • |并集{1,2} | {2,3}{1,2,3}
    • &交集{1,2} & {2,3}{2}
    • -差集{1,2} - {2,3}{1}
    • ^对称差集{1,2} ^ {2,3}{1,3}
    • 比较:<=<>=>判断子集/超集
  • 其他len()、集合推导式、copy()
s={1,2,3}s.add(4)# {1,2,3,4}s.discard(2)# {1,3,4}s.remove(3)# {1,4}print(1ins)# Trueprint(s|{5,6})# {1,4,5,6}print(s&{4,5,6})# {4}print(s-{4})# {1}

4. 其他类型的常用操作

  • 元组(tuple):不可变,所以没有增删改,但支持查(索引、切片、in)、拼接(+)、重复(*)、比较、len()等。
    t=(1,2,3)print(t[1])# 2print(t+(4,))# (1,2,3,4)
  • 数组(array):支持类似列表的操作,但元素类型相同。提供append()extend()、索引赋值等。
  • 双端队列(deque):两端快速操作,append()appendleft()pop()popleft()rotate()等。
  • 默认字典(defaultdict):当键不存在时自动调用工厂函数生成默认值。
    fromcollectionsimportdefaultdict dd=defaultdict(list)dd['a'].append(1)# 即使键'a'不存在也会自动创建空列表
  • 计数器(Counter):类似字典,用于计数,支持most_common()、加减运算(+-)等。
    fromcollectionsimportCounter c=Counter('abbccc')print(c)# Counter({'c':3, 'b':2, 'a':1})print(c.most_common(2))# [('c',3), ('b',2)]

四、总结:操作对比表

操作类别列表字典集合元组备注
append,insert,extendd[key]=value,updateadd,update不可变字典的“增”同时也是“改”
remove,pop,deldel,pop,popitemremove,discard,pop不可变
索引赋值键赋值不可改元素不可变集合元素不可变,但可增删
索引、切片、in键、getinin、子集判断索引、切片、in
运算+(拼接),*(重复)|(合并, 3.9+)|(并),&(交),-(差),^(对称差)+,*集合运算与数值加减含义不同
其他sort,reverse, 推导式推导式,keys,values推导式, 去重拆包, 命名元组扩展

通过以上对比,你可以根据具体需求选择合适的容器类型,并灵活运用它们提供的丰富操作。Python的容器生态非常强大,熟练掌握它们能极大提升编程效率。

http://www.jsqmd.com/news/479185/

相关文章:

  • wan2.1-vae惊艳效果实测:同一种子下不同引导系数对画面严谨性与创意性的平衡
  • USB免驱6D姿态传感器:台式机原生运动感知方案
  • 从AI音频分离到中国风真轨:Band in a Box 2025核心功能深度解析与实战指南
  • LFM2.5-1.2B-Thinking参数详解:Ollama中模型加载、量化与推理调优
  • FaceFusion遮罩功能使用教程:轻松解决脸部遮挡融合问题
  • Z-Image-Turbo LoRA WebUI历史记录功能实战:12条缓存管理与提示词复用技巧
  • C# WebAPI
  • 在Gazebo中为Husky机器人集成Livox激光雷达仿真
  • Ostrakon-VL-8B数据库课程设计项目:构建多媒体内容管理平台
  • LiuJuan20260223Zimage入门指南:Z-Image模型架构解析与LoRA注入原理简述
  • GaussDB数据库安全配置实战:gs_guc命令深度解析与应用指南
  • 工作总结-大模型使用
  • Leather Dress Collection 环境配置详解:Anaconda创建独立Python虚拟环境
  • 【UE5】多用户协同编辑实战:从零搭建到高效协作
  • 2026坠落防护行业生命线品牌推荐榜:导轨水平生命线系统/屋面垂直生命线/屋面水平生命线/水平生命线品牌/水平生命线国标/选择指南 - 优质品牌商家
  • AIGlasses OS Pro视觉算法优化:提升目标检测效率
  • Step3-VL-10B-Base与Python安装教程:环境配置与验证
  • 嵌入式Linux设备语音唤醒:Qwen3-ASR-0.6B轻量化移植实践
  • 实战派ESP32-C3/ESP32-S3开发板:从原型到产品的全功能物联网硬件解析
  • SCAU期末通关 - 计算机系统基础核心习题精讲
  • 3大核心功能实现工业管理效率优化:DoubleQoLMod-zh模组全解析
  • fio 磁盘I/O测试工具:从安装到实战性能调优
  • Qwen3.5-27B一文详解:transformers pipeline加载方式与accelerate device_map配置
  • Qwen2.5-1.5B惊艳效果展示:本地1024 tokens长文本生成真实对话集
  • 从零到一:基于Multisim的24小时多功能数字钟设计与仿真全解析
  • ANIMATEDIFF PRO实战案例:25秒生成16帧电影级动图的完整工作流
  • 如何为SAP GUI的ABAP编辑器打造个性化黑色主题
  • 实战指南:基于快马平台构建企业级openclaw机器人启动控制系统
  • nnUNet_v2实战:从零搭建Linux环境下的医学影像分割全流程
  • ESP32 Type-C PD电流表:高精度快充协议测试与功率监测