PY调包侠——Collections高效库

news2024/11/20 14:21:38

一、【写在前面】

PY是一个调包侠语言,多学一个库可以提高计算速度。Collections提供了各种数据类型和集合工具,可以很方便的处理各种数据结构。如果您有刷力扣的习惯,可以经常看到Collections和itertools的身影,经常用这两个可以做到一行解题,之前笔者介绍过了Itertools,这篇文章介绍一下Collection。

官网:collections — Container datatypes — Python 3.12.1 documentation

itertools博客:python强大的排列组合库-itertools-CSDN博客 

二、【正式介绍】

这个Collections库官网文档就9个方法,一篇博客就能介绍完。

1. namedtuple

namedtuple 用于创建带有字段名称的元组,使得元组的每个字段都有一个易于理解的名称。它通常用于表示记录型的数据。以下是示例:

from collections import namedtuple 
# 创建一个名为 'Person' 的命名元组,包含 'name' 和 'age' 两个字段 
Person = namedtuple('Person', ['name', 'age']) 
# 创建一个 Person 对象 
person = Person(name='Alice', age=30) 
# 访问字段 print(person.name) # 输出 'Alice' 
print(person.age) # 输出 30

2. deque

deque 是双端队列,支持高效地在两端进行添加和删除操作。它适用于需要快速操作队列和栈的场景。以下是示例:

from collections import deque 
# 创建一个空的双端队列 
dq = deque() 
# 在队列的右端添加元素 
dq.append(1) dq.append(2) 
# 在队列的左端添加元素 
dq.appendleft(0) 
# 弹出右端的元素 
print(dq.pop()) 
# 输出 2 
# 弹出左端的元素 
print(dq.popleft())
 # 输出 0

3. Counter

Counter 用于统计可迭代对象中元素的出现次数。它返回一个字典,其中键是元素,值是元素出现的次数。以下是示例:

from collections import Counter 
# 统计字符串中字符的出现次数 
text = "hello world" 
char_count = Counter(text) 
# 获取字符 'l' 的出现次数 
print(char_count['l']) # 输出 3

4. OrderedDict

OrderedDict 是有序字典,记住了元素的插入顺序。与普通字典不同,OrderedDict 在迭代时会按照元素的插入顺序返回。以下是示例:

from collections import OrderedDict 
# 创建一个有序字典 
ordered_dict = OrderedDict() 
# 添加键值对 
ordered_dict['a'] = 1 ordered_dict['b'] = 2 
# 迭代时按照插入顺序返回键值对 
for key, value in ordered_dict.items(): 
    print(key, value) 
    # 输出: # a 1 # b 2

5. defaultdict

defaultdict 是字典的子类,允许为字典中的每个键设置默认值。这样,在访问不存在的键时,不会引发 KeyError。以下是示例:

from collections import defaultdict 
# 创建一个默认值为 0 的 
defaultdict num_dict = defaultdict(int) 
# 添加键值对 
num_dict['a'] = 1 
# 访问不存在的键,默认值为 0 
print(num_dict['b']) 
# 输出 0

6. ChainMap

ChainMap 允许将多个字典链接在一起,形成一个逻辑上的单一字典。这对于组合多个配置或选项字典非常有用。以下是示例:

from collections import ChainMap 
# 创建两个字典 
dict1 = {'a': 1, 'b': 2} 
dict2 = {'b': 3, 'c': 4} 
# 创建 ChainMap 将两个字典链接在一起 
combined_dict = ChainMap(dict1, dict2) 
# 访问键 'b',将返回第一个字典中的值 
print(combined_dict['b']) 
# 输出 2

7. UserDict

7、8、9这三个方法都带一个User,本质是一个可以自己定义方法的Class,对self.data直接操作即可。

UserDict 是用于自定义字典行为的包装器类。它继承自内置的 dict 类,并允许您重写字典的方法以实现自定义行为。通常,UserDict 用于创建自定义的字典类型,以添加特定的方法或修改字典的行为。

示例用法:

from collections import UserDict 
class MyDict(UserDict): 
    def get_keys(self): 
        return list(self.data.keys()) 

my_dict = MyDict({'a': 1, 'b': 2}) 

keys = my_dict.get_keys() 
print(keys) # 输出 ['a', 'b']

8. UserList

UserList 用于自定义列表行为的包装器类。它继承自内置的 list 类,并允许您重写列表的方法以实现自定义行为。通常,UserList 用于创建自定义的列表类型,以添加特定的方法或修改列表的行为。

示例用法:

from collections import UserList 
class MyList(UserList):    
    def append_twice(self, value): 
        self.data.append(value) 
        self.data.append(value) 

my_list = MyList([1, 2, 3]) 
my_list.append_twice(4) 
print(my_list) # 输出 [1, 2, 3, 4, 4]

9. UserString

UserString 用于自定义字符串行为的包装器类。它继承自内置的 str 类,并允许您重写字符串的方法以实现自定义行为。通常,UserString 用于创建自定义的字符串类型,以添加特定的方法或修改字符串的行为。

示例用法:

from collections import UserString 

class MyString(UserString): 
    def reverse(self): 
        return self.data[::-1] 

my_string = MyString("hello") 
reversed_str = my_string.reverse() 
print(reversed_str) # 输出 'olleh'

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

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

相关文章

阿里云 SAE 2.0 正式商用:极简易用、百毫秒弹性效率,降本 40%

作者:黛忻 本文主要介绍阿里云 Serverless 应用引擎(以下简称 SAE )如何帮助企业跨越技术鸿沟,从传统应用架构无感升级到 Serverless 架构,以更高效、更经济的方式进行转型,快速进入云原生快车道&#xff0…

牛客周赛 Round 29 解题报告 | 珂学家 | 博弈概率DP

前言 整体评价 F题真心好题,很典,学到了很多。D题用了对顶堆,写到一半就想到了更简单的方法,哭。E题是基于众数的构造。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红大战小紫 思路: 模拟 n, m list(map(…

Qt6入门教程 9:QWidget、QMainWindow和QDialog

目录 一.QWidget 1.窗口和控件 2.事件 二.QMainWindow 三.QDialog 1.模态对话框 1.1模态对话框 1.2.半模态对话框 2.非模态对话框 在用Qt Creator创建Qt Widgets项目时,会默认提供三种基类以供选择,它们分别是QWidget、QMainWIndow和QDialog&am…

ChatGPT五大教育潜能与四大教育风险

关于ChatGPT将对学校教育产生何种影响,教育界尚未达成共识。这在很大程度上反映了人们审视ChatGPT教育潜能时所采取的不同视角和立场。如果我们从前面提及的生态视角和学习者发展立场来看,ChatGPT可以与学习者之间建立协作、共生和进化的良性生态关系&am…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地,将预制体作为AB包资源,不仅需要对预制体本身进行归类,还要对其涉及的动画(AnimationClip)、动画状态机(AnimatorController)、以及所…

7、机器学习中的数据泄露(Data Leakage)

找到并修复这个以微妙的方式破坏你的模型的问题。 数据泄露这个概念在kaggle算法竞赛中经常被提到,这个不同于我们通常说的生活中隐私数据暴露,而是在竞赛中经常出现某支队伍靠着对极个别feature的充分利用,立即将对手超越,成功霸占冠军位置,而且与第二名的差距远超第二名…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-1最优控制问题与性能指标

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-1最优控制问题与性能指标

基于OpenSSL的SSL/TLS加密套件全解析

概述 SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在O…

机器人制作开源方案 | 全自动导航分拣机器人

作者:孙国峰 董阳 张鑫源 单位:山东科技大学 机械电子工程学院 指导老师:张永超 贝广霞 1. 研究意义 1.1 研究背景 在工业生产中,机器人在解决企业的劳动力不足,提高企业劳动生产率,提高产品质量和降低…

【设计模式】适配器和桥接器模式有什么区别?

今天我探讨一下适配器模式和桥接模式,这两种模式往往容易被混淆,我们希望通过比较他们的区别和联系,能够让大家有更清晰的认识。 适配器模式:连接不兼容接口 当你有一个类的接口不兼容你的系统,而你又不希望修改这个…

【笔记】Blender4.0建模入门-3物体的基本操作

Blender入门 ——邵发 3.1 物体的移动 演示: 1、选中一个物体 2、选中移动工具 3、移动 - 沿坐标轴移动 - 在坐标平面内移动 - 自由移动(不好控制) 选中物体:右上的大纲窗口,点击物体名称,物体的轮…

【Python 元编程】装饰器入门指南

Python装饰器入门指南🚀 在编程世界中,效率和优雅的代码往往是我们所追求的目标。Python 作为一种强大且灵活的编程语言,提供了一个称为“装饰器”的功能,让我们能够以一种简洁和优雅的方式扩展和管理我们的代码。 本文旨在为初…

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb…

生产环境 OpenFeign 的配置最佳实践

基础使用 OpenFeign 全方位讲解 1. 生产环境 OpenFeign 的配置事项 1.1 如何更改 OpenFeign 默认的负载均衡策略 warehouse-service: #服务提供者的微服务IDribbon:#设置对应的负载均衡类NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule1.2 开启默认的 O…

C++ //练习 2.14 下面的程序合法吗?如果合法,它将输出什么?

C Primer&#xff08;第5版&#xff09; 练习 2.14 练习 2.14 下面的程序合法吗&#xff1f;如果合法&#xff0c;它将输出什么&#xff1f; int i 100, sum 0; for(int i 0; i ! 10; i)sum i; std::cout<<i<<" "<<sum<<std::endl;环境…

scipy通过快速傅里叶变换实现滤波

文章目录 fft模块简介fft函数示例滤波 fft模块简介 scipy官网宣称&#xff0c;fftpack模块将不再更新&#xff0c;或许不久之后将被废弃&#xff0c;也就是说fft将是唯一的傅里叶变换模块。 Fourier变换极其逆变换在数学上的定义如下 F ( ω ) ∫ − ∞ ∞ f ( t ) e − i ω…

Python图像处理【19】基于霍夫变换的目标检测

基于霍夫变换的目标检测 0. 前言1. 使用圆形霍夫变换统计图像中圆形对象2. 使用渐进概率霍夫变换检测直线2.1 渐进霍夫变换原理2.2 直线检测 3. 使用广义霍夫变换检测任意形状的对象3.1 广义霍夫变换原理3.2 检测自定义形状 小结系列链接 0. 前言 霍夫变换 (Hough Transform,…

2024最新:optee系统开发精讲 - 课程介绍

&#xff08;本课程中如有涉及代码或硬件架构&#xff0c;则对应的版本号&#xff1a;TF-A 2.80&#xff0c;optee 3.20, Linux Kernel 6.3&#xff0c;armv8.79.0的aarch64&#xff09; &#xff08;注意&#xff1a; 该课程没有PPT&#xff0c;该课程是对照代码讲解的&#x…

回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于ABC-SVR人工蜂群算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于ABC-SVR人工蜂群算法优化支持…

矩阵重叠问题判断

创作背景 看到一道题目有感而发想写一篇题解&#xff0c;涉及的是一种逆向思维 桌面窗体重叠 - 洛谷https://www.luogu.com.cn/problem/U399827题目来源于《信息学奥赛课课通》 大致就是给一个长方形的左上顶点坐标&#xff08;x1,y1&#xff09;和右下顶点坐标&#xff08;x…