Python深入理解collections模块:常见数据结构及应用场景分析

news2024/9/21 19:07:45

Python深入理解collections模块:常见数据结构及应用场景分析

    • 介绍
    • collections模块的常见数据结构
    • 代码演示
      • defaultdict
      • Counter
      • OrderedDict


介绍

在Python编程中,经常需要使用一些内置的数据结构,如列表、字典等。然而,在某些特定的场景下,这些内置数据结构可能无法满足需求。这时,可以考虑使用collections模块提供的特殊数据结构。本文将深入探讨collections模块中的常见数据结构,如defaultdict、Counter、OrderedDict等,以及它们的应用场景和性能特点。

collections模块的常见数据结构

模块应用场景性能特点
collectionsdefaultdict当需要为字典中的键指定一个默认值,或者在遍历字典时需要处理键不存在的情况时,可以使用defaultdict。相比于内置的字典,defaultdict在创建键时会多一层判断,因此性能略逊一筹。但是,它提供了便利性,可以减少代码的复杂性。
collectionsCounter当需要统计一个列表、字符串等可迭代对象中每个元素的出现次数时,可以使用Counter。Counter在统计元素出现次数时,性能与内置的dict相当。但是,Counter提供了额外的方法,如most_common(),可以方便地获取出现次数最多的元素。
collectionsOrderedDict当需要按照元素插入的顺序访问字典中的键值对时,可以使用OrderedDict。OrderedDict在维护元素顺序方面会消耗一定的性能,因此相比于普通字典,它的性能稍逊一筹。但是,它提供了有序的字典功能,可以提高代码的可读性。

代码演示

defaultdict

from collections import defaultdict

# 创建一个数字列表
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

# 使用 defaultdict 来创建一个计数器
counts = defaultdict(int)

# 计数每个数字出现的次数
for number in numbers:
    counts[number] += 1

# 打印计数结果
for number, count in counts.items():
    print(f'数字 {number} 出现了 {count} 次。')

运行上述代码,输出结果为:

数字 1 出现了 1 次。
数字 2 出现了 2 次。
数字 3 出现了 3 次。
数字 4 出现了 4 次。

在这里插入图片描述

Counter

以下是一个使用Counter进行统计分析的简单代码:

from collections import Counter

# 创建一个列表
pans = ['铅笔', '圆珠笔', '铅笔', '钢笔', '钢笔', '毛笔']
# 使用Counter统计每种笔出现的次数
pan_count = Counter(pans)
# 输出统计结果
print(pan_count)

运行上述代码,输出结果为:

Counter({'铅笔': 2, '钢笔': 2, '圆珠笔': 1, '毛笔': 1})

在这里插入图片描述

OrderedDict

from collections import OrderedDict

# 创建一个 OrderedDict 实例
ordered_dict = OrderedDict()

# 添加一些键值对
ordered_dict['钢笔'] = 1
ordered_dict['毛笔'] = 2
ordered_dict['铅笔'] = 3

# 按照添加的顺序遍历键值对
for key, value in ordered_dict.items():
    print(f'{key}: {value}')

# 输出:
# 钢笔: 1
# 毛笔: 2
# 铅笔: 3

# 更新一个键值对
ordered_dict['毛笔'] = 4

# 再次遍历,可以看到更新后的键值对
for key, value in ordered_dict.items():
    print(f'{key}: {value}')

# 输出:
# 钢笔: 1
# 毛笔: 4
# 铅笔: 3

# 删除一个键值对
del ordered_dict['钢笔']

# 再次遍历
for key, value in ordered_dict.items():
    print(f'{key}: {value}')

# 输出:
# 毛笔: 4
# 铅笔: 3

运行的结果

钢笔: 1
毛笔: 2
铅笔: 3
钢笔: 1
毛笔: 4
铅笔: 3
毛笔: 4
铅笔: 3

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp 本地存储的方式

1. uniapp 本地存储的方式 在uniapp开发中,本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据,以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式,以及相关的代码示例。 1.1. 介绍 在移动应用开发…

OSPF综合实验报告

实验要求: 实验预览图: 实验分析: 1、对R4仅仅配置端口IP和环回,使用共有IP 2、对R3-R7配置MGRE环境,以R3为hub,R5、R7、R6为spoke。 3、对172.16.0.0/16 IP进行子网划分,使得全网IP基于该网…

数据结构第十天(排序算法总结)

目录 前言 常数时间复杂度:O(1) 线性时间复杂度:O(n) 线性对数时间复杂度:O(n log n) 平方时间复杂度:O(n^2) 对数时间复杂度:O(log n) 前言 排序算法的学习可以告一段落了。但算法的学习永不停止。 今天&…

用python编写爬虫,爬取二手车信息+实验报告

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我

通过dockerfile 生成自定义nginx镜像

通过dockerfile生成自定义nginx镜像 !!!docker 必须在linux环境下才能进行如果你是window则需要装虚拟机 新建一个文件名字为Dockerfile,无需后缀 文件完整名就是Dockerfile 编写dockerfile FROM nginx RUN echo hello nginx!…

golang windows 环境搭建 环境配置

golang windows 环境搭建 环境配置 Golang学习之路一环境搭建 MacBook Linux 树莓派raspberrypi安装Golang环境 官网下载地址: https://go.dev/dl/ https://golang.google.cn/dl/ 下载对应系统版本,例如windows 64位系统,下载:xxx.window…

年终奖,有人欢喜有人忧

每年的年终奖,有人欢喜有人忧,这是科技圈的一种共同现象。最近,科技界最热门的新闻无疑是Meta公布了其Q4和2023年全年财报,被许多人誉为“史上最强财报”。 Meta的股价也从2022年的最低点90美元左右,一路飙升至现在的每…

2024.02.06

TCP提供面向有连接的,可靠的数据传输服务,传输过程中,数据无误、数据无丢失、数据无失序、数据无重复 UDP面向无连接的,不保证数据可靠的,尽最大努力传输的协议,数据传输过程中,可能出现数据丢…

【C++11】统一初始化 和 initializer_list

文章目录 一、概念辨析1. 声明、定义、初始化、赋初值的概念2. 默认初始化 和 未被初始化 的概念 二、C98 的列表初始化三、C11 对列表初始化的扩展(统一初始化)四、标准库中的 initializer_list 类五、正确理解“统一初始化”和 initializer_list 的区别…

JRT监听程序

本次设计避免以往设计缺陷,老的主要为了保持兼容性,在用的设计就不好调了。 首先,接口抽象时候就不在给参数放仪器ID和处理类了,直接放仪器配置实体,接口实现想用什么属性就用什么属性,避免老方式要扩参数时…

Golang GC 介绍

文章目录 0.前言1.发展史2.并发三色标记清除和混合写屏障2.1 三色标记2.2 并发标记问题2.3 屏障机制Dijkstra 插入写屏障Yuasa 删除写屏障混合写屏障 3.GC 过程4.GC 触发时机5.哪里记录了对象的三色状态?6.如何观察 GC?方式1:GODEBUGgctrace1…

cocos creator 3.x 预制体无法显示

双击预制体,进入详情页,没有显示资源 Bomb 是个预制体,但是当我双击进来什么都没有了,无法对预制体进行可视化编辑 目前我只试出来一个解决方法: 把预制体拖进Canvas文件中,这样就能展示到屏幕上&#xff…

springboot集成easypoi导出多sheet页

pom文件 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version> </dependency> 导出模板&#xff1a; 后端代码示例&#xff1a; /*** 导出加油卡进便利店大额审批列…

三网码支付系统源码,三网免挂有PC软件,有云端源码,附带系统搭建教程

搭建教程 1.先上传云端源码 然后配置Core/Config.php文件里面数据库信息注改&#xff1b;数据库帐号密码 2.云端源码里面Core/Api_Class/Instant_Url_List.php文件配置终端地址注改&#xff1b;第4 http://终端地址/ 3.导入云端数据库 账号admin 密码123456注改&#xff1…

ELAdmin 前端启动

开发工具 官方指导的是使用WebStorm&#xff0c;但是本人后端开发一枚&#xff0c;最终还是继续使用了 idea&#xff0c;主打一个能用就行。 idea正式版激活方式&#xff1a; 访问这个查找可用链接&#xff1a;https://3.jetbra.in/进入任意一个能用的里面&#xff0c;顶部提…

java---查找算法(二分查找,插值查找,斐波那契[黄金分割查找] )-----详解 (ᕑᗢᓫ∗)˒

目录 一. 二分查找&#xff08;递归&#xff09;&#xff1a; 代码详解&#xff1a; 运行结果&#xff1a; 二分查找优化&#xff1a; 优化代码&#xff1a; 运行结果&#xff08;返回对应查找数字的下标集合&#xff09;&#xff1a; ​编辑 二分查找&#xff08;非递归…

YUM | 包安装 | 管理

YUM 功能 软件包安装&#xff1a; 通过yum命令安装软件包。例如&#xff0c;安装一个名为 example-package 的软件包 yum install example-package更新包 检查更新&#xff1a; 检查可用更新&#xff1a; sudo yum check-update <package_name>软件包更新&#xff1a; y…

k8s报错记录(持续更新中....)

k8s报错记录(持续更新中…) 1. 部署k8s遇到kube-flannel已经构建&#xff0c;但是coredns一直处于ContainerCreating和pending状态 解决问题&#xff1a; 通过 kubectl describe pod -n kube-system coredns-7ff77c879f-9ls2b 查看pod的详细信息&#xff0c;报错说是cni 配置没…

Linux系统调试课:硬件断点

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在linux内核编程中,经常会遇到由于内存被篡改,例如 buffer overflow,野指针,write after free等。查找分析此类问题非常的麻烦。 一、什么是硬件断点 硬件断点,是Linux内核中是一种被ptrace和内核内调试器使用调试…

蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)

目录 一、蓝桥杯概述 二、软件的使用 三、点亮LED 一、蓝桥杯概述 蓝桥杯是一个编程大赛、商赛&#xff0c;获奖率高达60%&#xff08;省赛中一等奖10%、二等奖20%、三等奖30%&#xff09;&#xff0c;但这并不影响它的含金量&#xff0c;多所高校将它列为A类赛事并实行保研…