python 蓝桥杯之常用的库

文章目录

  • heapq
  • Counter
      • 导入模块
      • 创建一个 Counter 对象
      • 获取元素的出现次数
      • 访问特定元素的计数
      • 更新计数
      • 获取计数值最高的元素
      • 其他常用方法
  • defaultdict
      • 导入模块
      • 创建一个 defaultdict(set)
      • 向字典中添加元素
      • 访问字典中的元素
      • 访问不存在的键
      • 注意事项

heapq

heapq 是 Python 中的一个内置模块,提供了对堆数据结构的支持。堆是一种特殊的树形数据结构,具有以下特点:

  1. 在堆中,父节点的值总是小于或者大于它的子节点的值,这取决于是最小堆还是最大堆。
  2. 堆是一个完全二叉树,通常使用数组来实现。

heapq 模块提供了一系列函数,可以在普通的列表上模拟堆的行为。下面是一些 heapq 库的常用函数及其用法:

  1. heapify(iterable):将一个可迭代对象转换为堆数据结构。

    import heapqheap = [3, 1, 4, 1, 5, 9, 2, 6, 5]
    heapq.heapify(heap)
    print(heap)
    # 输出:[1, 1, 2, 5, 3, 9, 4, 6, 5]
    
  2. heappush(heap, item):向堆中添加一个新元素。

    import heapqheap = [3, 1, 4]
    heapq.heappush(heap, 2)
    print(heap)
    # 输出:[1, 2, 4, 3]
    
  3. heappop(heap):从堆中弹出并返回最小元素。

    import heapqheap = [1, 2, 4, 3]
    smallest = heapq.heappop(heap)
    print(smallest)  # 输出:1
    print(heap)      # 输出:[2, 3, 4]
    
  4. heapreplace(heap, item):弹出并返回最小元素,并将新元素推入堆中。

    import heapqheap = [1, 2, 4, 3]
    smallest = heapq.heapreplace(heap, 5)
    print(smallest)  # 输出:1
    print(heap)      # 输出:[2, 3, 4, 5]
    
  5. nlargest(n, iterable):返回可迭代对象中的前 n 个最大元素。

    import heapqnumbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
    largest = heapq.nlargest(3, numbers)
    print(largest)  # 输出:[9, 6, 5]
    
  6. nsmallest(n, iterable):返回可迭代对象中的前 n 个最小元素。

    import heapqnumbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
    smallest = heapq.nsmallest(3, numbers)
    print(smallest)  # 输出:[1, 1, 2]
    

这些函数为使用堆数据结构提供了便利,使得对列表的操作更加高效。

Counter

Counter 是 Python 标准库中 collections 模块提供的一个类,用于对可迭代对象中的元素进行计数。它提供了一种快速、高效的方式来统计列表、字符串或其他可迭代对象中各元素的出现次数,并以字典的形式返回统计结果。

以下是 Counter 类的一些主要特性和用法:

导入模块

from collections import Counter

创建一个 Counter 对象

# 通过列表创建 Counter 对象
word_counts = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])# 通过字符串创建 Counter 对象
char_counts = Counter('abracadabra')

获取元素的出现次数

print(word_counts)
# 输出:Counter({'apple': 3, 'banana': 2, 'orange': 1})print(char_counts)
# 输出:Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

访问特定元素的计数

print(word_counts['apple'])
# 输出:3print(char_counts['a'])
# 输出:5

更新计数

update 接收的参数必须是可迭代的

# 通过加法更新计数
word_counts.update(['apple', 'orange'])
print(word_counts)
# 输出:Counter({'apple': 4, 'banana': 2, 'orange': 2})# 通过减法更新计数
word_counts.subtract(['apple', 'banana'])
print(word_counts)
# 输出:Counter({'apple': 3, 'orange': 2, 'banana': 1})

那么对于整数的计数

from collections import Counternum = Counter()
for i in range(10):num.update([i])print(num)

我们可以给数字加上一个列表的外壳
返回一个类似字典的形式

获取计数值最高的元素

# 获取出现次数最高的两个元素及其次数
top_two = word_counts.most_common(2)
print(top_two)
# 输出:[('apple', 3), ('orange', 2)]

其他常用方法

  • elements(): 返回一个迭代器,包含所有计数大于 0 的元素。
  • keys(): 返回 Counter 对象中所有的元素。
  • values(): 返回 Counter 对象中所有元素的计数值。

Counter 类提供了一种简单而强大的方法来进行元素计数,尤其适用于需要统计频率、词频等问题。它的使用方法简单明了,能够快速地对数据进行统计分析。

defaultdict

defaultdict(set) 是一种使用 defaultdict 创建的特殊类型的字典,它的默认值是一个空的 set 集合。defaultdict(set) 的工作原理与普通的 defaultdict 类似,但是它的默认值类型是一个空的 set,这使得在使用时特别方便,尤其是在需要存储一组唯一值时。

下面是关于 defaultdict(set) 的详细介绍以及使用示例:

导入模块

from collections import defaultdict

创建一个 defaultdict(set)

d = defaultdict(set)

向字典中添加元素

d['group1'].add('value1')
d['group1'].add('value2')
d['group2'].add('value3')

在我们创建defaultdict 对象的时候,在具体的使用的时候,应该配合使用add , append 等方法

访问字典中的元素

print(d['group1'])  # 输出:{'value1', 'value2'}
print(d['group2'])  # 输出:{'value3'}

访问不存在的键

当你访问一个不存在的键时,defaultdict(set) 会自动创建这个键,并将其对应的值初始化为一个空的 set

print(d['group3'])  # 输出:set()

注意事项

  • 在使用 defaultdict(set) 时,你不需要手动初始化每个键的值为一个空的 set,因为它会自动创建并初始化这些值。
  • 当你向某个键对应的值中添加元素时,如果这个键不存在,defaultdict(set) 会自动创建该键并将其对应的值初始化为一个空的 set
  • 使用 defaultdict(set) 可以方便地管理一组唯一值,因为 set 可以确保其中的元素唯一性,并且你可以直接使用 add() 方法添加元素,而不必担心键不存在的问题。

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

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

相关文章

基于决策树实现葡萄酒分类

基于决策树实现葡萄酒分类 将葡萄酒数据集拆分成训练集和测试集,搭建tree_1和tree_2两个决策树模型,tree_1使用信息增益作为特征选择指标,B树使用基尼指数作为特征选择指标,各自对训练集进行训练,然后分别对训练集和测…

图论练习6

[NOIP2013]车站分级 Here 解题思路 由于起始点之间所选的站号,相互之间一定满足那么对于起始点间未选择的站号,一定满足选择的站号考虑用边来维护信息,表示的级别大于按题意,则车站会被分为几个联通块,且保证块内无环…

So you think you understand IP fragmentation?

文章目录 前言一、Why care?二、Prevention三、Well-understood?四、Introducing fragquiz五、A novel (?) algorithm六、Reader challenge七、traceroute八、ICMP参考资料 前言 本文来自:https://lwn.net/Articles/960913/ February 7, 2024This article was …

【Python】成功解决ModuleNotFoundError: No module named ‘seaborn’

【Python】成功解决ModuleNotFoundError: No module named ‘seaborn’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 …

高分辨率全球海洋温度和盐度再分析数据Global Ocean Physics Reanalysis(0.083°),并利用matlab读取绘图

1.引言 在研究全球海平面变化的问题中,卫星测高获得总的海平面变化,而海平面变化包含质量变化和比容变化。因此测高数据和海洋物理分析数据对于海平面研究至关重要。 测高数据下载网址: Global Ocean Gridded L 4 Sea Surface Heights And …

动态规划课堂4-----子数组系列

目录 引入: 例题1:最大子数组和 例题2:环形子数组的最大和 例题3:乘积最大子数组 例题4:乘积为正数的最长子数组 总结: 结语: 引入: 在动态规划(DP)子…

农场管理小程序|基于微信小程序的农场管理系统设计与实现(源码+数据库+文档)

农场管理小程序目录 目录 基于微信小程序的农场管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、农场信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 五、核心代码 七、最新计算机毕设选题推荐 八、源码获取&#x…

mysql和redis的区别

一.额外知识 1.为什么内存读取比硬盘读取快 在了解mysql和redis的区别之前,先来讨论一下额外的知识:为什么内存读取比硬盘读取快? 先看一个结论:内存读取至少比硬盘读取快10万倍 首先机械硬盘基本上的速度都在100MB-200MB 之间,SSD硬盘快一点,但是也是在500MB左右…

【工具使用-VScode】VScode如何设置空格和tab键显示

一,简介 在提交代码的时候,行末尾的tab和空格不符合规范,但是如果在vscode中不显示tab和空格的话,不能及时的查看到并改正,导致提交代码之后还需要再次进行修改,效率比较低。 代码编辑界面如图所示&#…

【大厂AI课学习笔记NO.68】开源和开源发展情况

开源即源代码公开,任何人能获取源代码,查看、修改、分发他们认为合适的代码。 依托同行评审和社区生成,旨在以分散、协作的方式开发。 我们曾经很详细的讨论过开源协议的问题,详细可以参考我的文章: https://giszz.…

CaricatureFace 学习笔记

目录 3d人脸重建开源项目汇总 CaricatureFace 依赖项: 有的电脑安装失败: 3d人脸重建开源项目汇总 3D人脸重建开源项目整理_reconstruction 项目-CSDN博客 2020 CVPR 漫画三维人脸重建) CaricatureFace 依赖项: openmesh 有的电脑安…

高频设计模式

文章目录 高频设计模式单例模式饿汉式(Eager Initialization)懒汉式(Lazy Initialization)双重校验锁(Double-Checked Locking)静态内部类(Static Inner Class)枚举(Enum…

LeetCode-1004. 最大连续1的个数 III

每日一题系列(day 20) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50…

软考高级:耦合分类(内容耦合、公共耦合、外部耦合等)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

docker部署在线聊天室平台Fiora

Fiora 是一款开源免费的在线聊天系统 https://github.com/yinxin630/fiora 部署 创建docker网络 docker network create fiora-networkdocker-compose部署 vim docker-compose.yml version: 3 services:fiora_redis:image: rediscontainer_name: fiora_redisrestart: alway…

Vue3 子/父组件相互调用

1&#xff1a;子组件调用父组件 父组件&#xff1a; <template><div><button style"margin: 50px">父按钮</button> <!--已clk为名称的事件传递给子组件&#xff0c;传递的是父组件的a函数/事件 --><Child clk"a" />…

huggingface实现Bark模型

目录 引言 使用半精度 使用CPU卸载 使用Better Transformer 使用Flash Attention 2 安装 使用 组合优化技术 使用技巧 BarkConfig 实例化 BarkConfig 参数说明 BarkProcessor 参数 __call__ 方法 from_pretrained 方法 save_pretrained 方法 BarkModel 生成…

电脑解锁后黑屏有鼠标--亲测!!不需要重装系统!!

问题&#xff1a;上周电脑黑屏&#xff0c;只有鼠标&#xff0c;鼠标还不能右键&#xff01;&#xff01; 中招&#xff1a;win10系统最新版火绒安全 &#xff0c;那你有概率获得开机黑屏套餐一份。 原因是&#xff1a;火绒把我们的explorer删除了导致黑屏&#xff0c;这个文…

【OpenGL手册11】材质的模型

目录 一、说明二、材质表面和光照三、设置材质四、光的属性五、不同的光源颜色练习 一、说明 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的…

1分钟带你学会使用装饰器编写Python函数

1.需求 向 test() 函数中&#xff0c;新增一个功能&#xff0c;多输出一句话"给他补铁" def test():print("水中放吸铁石") # test()# 第一种方式&#xff1a;重写函数 def test():print("水中放吸铁石")print("给他补铁") test()# …