Python常用库1:collections,容器数据类型

news2024/12/28 20:47:07
  • collections:数据容器 点这里跳到原文地址。
  • 预计阅读时长:10分钟+
  • 未完待续,遇到相关力扣题目,会继续补充~

文章目录

  • 前言
  • 一、Collections中的内置函数
  • 二、各个函数的使用
    • 1. deque
      • 1.1 deque的介绍
      • 1.2 deque支持的方法
      • 1.3 使用deque解决二叉树的层序遍历
    • 2. 认识ChainMap
    • 3. Counter
      • 3.1 使用Counter解决:力扣169. 多数元素
      • 3.2 使用Counter解决:力扣136. 只出现一次的数字
  • 总结


前言

   collections 是Python自带的库函数之一,该模块实现了专门的容器数据类型,为 Python 的通用内置容器、dict、list、set 和 tuple 提供了替代方案。


一、Collections中的内置函数

函数名称函数作用
namedtuple()用于创建具有命名字段的元组子类的工厂函数
deque()类似列表的容器,两端都可以增加和弹出
ChainMap()用于创建多个映射的单个视图的类 dict 类
Counter()用于计算可散列对象的 dict 子类
OrderedDict()添加了记住订单条目的 dict 子类
defaultdict()调用工厂函数以提供缺失值的 dict 子类
UserDict()包装字典对象以便更容易地进行字典子类化
UserList()包装列表对象以便更轻松地进行列表子类化
UserString()围绕字符串对象进行包装,以便更轻松地进行字符串子类化

二、各个函数的使用

1. deque

1.1 deque的介绍

   deque其实就是双端队列功能的扩展,双端队列支持从双端队列的任一侧进行 追加弹出操作

1.2 deque支持的方法

   deque对象支持以下方法:

  • append(x):将 x 添加到双端队列的右侧
  • appendleft(x):将 x 添加到双端队列的左侧
  • clear():从双端队列中删除所有元素,使其长度为 0
  • copy():创建双端队列的一个副本
  • count(x) :计算双端队列中等于 x 的元素的数量
  • extend(iterable):通过附加可迭代参数中的元素来扩展双端队列的右侧
  • extendleft(iterable):通过附加来自可迭代的元素来扩展双端队列的左侧。注意,一系列左附加会导致可迭代参数中元素的顺序颠倒
  • index(x[, start[, stop]]):返回 x 在双端队列中的位置。如果未找到,则返回第一个匹配项或引发 ValueError
  • insert(i, x):将 x 插入到位置 i 的双端队列中
  • pop():从双端队列的右侧移除并返回一个元素
  • popleft():从双端队列的左侧移除并返回一个元素
  • remove(value):删除第一次出现的值
  • reverse():原地反转双端队列的元素,然后返回无。
  • rotate(n=1):向右旋转双端队列 n 步。如果 n 为负数,则向左旋转。

1.3 使用deque解决二叉树的层序遍历

  • 题目链接:102. 二叉树的层序遍历
  • 题目描述:给你二叉树的根节点 root ,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。
    示例1:
  • 解题思路:借助队列,模拟二叉树的层序遍历。第一步先让根节点进入队列并记录此时队列的大小size为什么要记录此时队列的大小呢,是因为我们要知道每一层有多少个节点,这样我们才知道我们遍历的是哪一层)。根据size的大小去操作队列的弹出与追加,具体操作如下图所示:
    在这里插入图片描述
  • python代码:
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from collections import deque
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        results = [] # 存放最终的结果
        if not root:
            return results
        queue = deque([root])
        while queue:
            size = len(queue)
            result = []
            for _ in range(size):
                cur = queue.popleft()
                result.append(cur.val)
               
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            results.append(result)
        return results

2. 认识ChainMap

   ChainMap(*maps)

3. Counter

   Counter是用于对可散列对象进行计数的dict子类。它是一个集合,其中元素存储为字典键,其计数存储为字典值。计数可以是任何整数值,包括零计数或负计数。Counter类类似于其他语言中的包或多集。

3.1 使用Counter解决:力扣169. 多数元素

  • 题目链接:169. 多数元素
  • 题目描述:给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
  • 解题思路:利用哈希表统计数组nums中每个元素出现的次数,输出最大的。这里借助collections库中的Counter容器,将nums存储为字典形式,键是nums中的元素,值是该元素所出现的次数,最后输出最大键即可。
  • python代码如下
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counts = collections.Counter(nums)
        return max(counts.keys(), key=counts.get)

3.2 使用Counter解决:力扣136. 只出现一次的数字

  • 题目链接:136. 只出现一次的数字
  • 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。【你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?】
  • 解题思路:与上一题十分类似,只是返回值的区别。
  • python代码实现:
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        counts = collections.Counter(nums)
        return min(counts.keys(), key=counts.get)

总结

  未完待续~~~。

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

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

相关文章

js-键盘事件

onkeydown:按键被按下 onkeyup:按键被松开 事件绑定的对象:键盘事件一般绑定给可以获取焦点的对象或者document对象 焦点:光标在闪的:比如input标签 如果一直按按键不松手,按键会一直被触发 当:onkeydown连续触发时…

THREE.JS实现看房自由(VR看房)

VR看房一、前言二、基础知识三、场景3.1 网络模型3.2 光照3.2.1 环境光3.2.2 平行光3.2.3 点光源3.2.4 聚光灯3.2.5 半球光四、相机4.1 正交相机4.2 透视相机五、渲染器六、贴图纹理6.1 基础介绍6.2 环境贴图6.3 HDR处理七、拓展7.1 坐标系7.2 控制器7.3 自适应7.4 全屏响应7.5…

C#基础·补丁

文章目录一 命名空间二字符串2.1 System.String类2.2 StringBuilder类三 正则表达式3.1 什么是正则表达式?3.2 查找举例3.3 重复描述字符举例3.4 反义字符3.5 基本语法元字符3.6 定位元字符3.7 择一匹配3.8 分组一 命名空间 二字符串 字符串类 System.String(strin…

python数据分析之numpy

数据分析之Numpy 1、Numpy的数组对象及其索引 import numpy as npimport numpy as npanp.array([1,2,3,4]) print(a) bnp.array([2,3,4,5]) print(b)print(ab)产生数组 从列表产生数组: list_array[1,2,3,4] anp.array(list_array) print(a)从列表传入&#xff…

PCB设计很简单?生产问题才是考验工程师能力的标准!

BOM清单有误 SMT产线:物料封装怎么和PCB焊盘不一致呢?停线排查。 仓库:我是按照BOM清单发的物料。 硬件研发:哎,BOM整理时马虎了。 过孔焊盘问题 “ 连锡问题 产线维修:怎么这么多连锡导致不良的产品&…

【安信可NB-IoT模组EC系列应用笔记⑧】用NB-IoT模组EC系列了解LwM2M协议并接入云平台

文章目录前言一、测试准备1、硬件准备2、云平台准备二、云平台连接1.注册入网2.读取IMSI及IMEI3.利用IMSI及IMEI创建设备4.LwM2M连接云平台设备三、 数据互交1.ATMIPLNOTIFY 通知属性变化2.ATMIPLREADRSP 返回读取结果3.ATMIPLWRITERSP 发送写入结果4.ATMIPLEXECUTERSP 发送执行…

1.uniapp全局状态管理

概念:把多个组件之间共享数据抽离出来,通过一个“单例模式”进行管理 工具:具备全局状态管理的库 Vuex:全局状态管理中的库 步骤: 1.建立Store文件夹 2.建立index.js文件 3.在main.js中注册Vue插件 4.测试Vuex是否导入成功 …

面试面麻了,别再为难软件测试人员了···

前言 有不少技术友在测试群里讨论,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些测试工程师了。 这不,为了帮大家节约时…

基于单片机的双足仿生运动机器人的设计

目录 1 概述 1 1.1 研究背景及意义 1 1.2 机器人的应用领域及发展现状 1 1.2.1 应用领域 1 1.2.2 发展现状 1 1.3 双足机器人设计要求 2 1.3.1 硬件部分 2 1.3.2 软件部分 2 2 系统方案设计 3 2.1 主控芯片选择 3 2.2 机器人自由度选择 3 2.3 驱动方案选择 3 2.4 双足机器人的步…

00后表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

web安全之信息收集

💪💪 web安全之信息收集1.网络入口/信息1.1网络拓扑信息1.2 IP信息1.3线下网络2.域名信息2.1Whios2.2搜索引擎搜索2.3. 第三方查询2.4. ASN信息关联2.5. 域名相关性2.6. 网站信息利用2.7. HTTPS证书2.8. CDN2.9. 子域爆破3.端口信息3.1常见端口3.2端口扫…

具有现代设计和最新Bootstrap版本的数字市场HTML模板

DegMark是具有现代设计和最新Bootstrap版本的数字市场HTML模板。凭借优秀的设计很容易创建虚拟商品交易网站,比如图片素材在线交易,视频文件交易,代码交易等虚拟商品交易。 主要特色 Bootstrapv5 移动响应 FontAwesome图标 jQuery增强 …

metaRTC Visual Studio编译指南

概述 metaRTC windows版本提供qt和vs2019两种编译支持,vs2019编译工程支持从metaRTC6.0版本开始,qt编译在B站有视频教程。 metaRTC5 windows版编译教程_哔哩哔哩_bilibilimetartc5编译教程,windows版本只支持msvc,下载所带第三方库为msvc20…

生物信息-快速序列比对-edlib包安装与使用方法-python和dll

安装 下载:https://github.com/Martinsos/edlib cd build && cmake -D CMAKE_BUILD_TYPERelease .. && make升级cmake https://cmake.org/download/ 下载tar.gz包,我这里下载的是: 拷贝到 /home/xxx/app 下解压&#xff…

初识C#事件

文章目录一 事件1 抛砖引玉案例1.1工具人下楼案例1.1.1 ToolMan.cs1.1.2 LazyMan.cs1.1.3 Program.cs1.1.4 测试结果1.1.5 升级到事件二 委托和事件的区别和联系一 事件 1 抛砖引玉案例 订阅和发布机制 比如说,我要下楼去吃饭,正常情况下我会问一下室友…

设计模式之适配器模式

设计模式之适配器模式 文章目录设计模式之适配器模式1. 定义2. 类型3. 场景4. 优点5. 缺点6. 适配器扩展6. 相关适配器模式7. coding7.1 被 适配者方法7.2 接口7.3 接口的实现7.4 适配者适配被适配者达到Target 目标7.5 类适配器的实现方式,其他的都不变8. 源码解析…

【Django】REST_Framework框架——序列化器serializers源码解析

一、序列化器类——Serializer 1、序列化器的作用 序列化器的使用分两个阶段: 1、在客户端请求时,使用序列化器可以完成对数据的反序列化(将字典格式的数据转化为模型对象)。 2、在服务器响应时,使用序列化器可以完…

网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理

JavaEE传送门JavaEE 网络原理——No.2 传输层_TCP的连接管理 网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制 目录延迟应答捎带应答面向字节流粘包问题TCP 中的异常处理(连接异常)TCP 和 UDP 的应用场景延迟应答 一种提高传输效率的机制, 又是基于流量控制, 来引…

Appinventor——蓝牙app(蓝牙遥控器、串口助手、温湿度显示、切换界面蓝牙依旧保持连接)

App Inventor由谷歌实验室开发,移交麻省理工学院,是一款图形化编程环境,不需要复杂的变成语言,采用搭积木的方式编程,只需将组件拖入即可,简直就是不爱编程党的超级福音 本文搭建了一个蓝牙app&#xff0c…

【CSS】CSS基础认知【CSS基础知识详解】

🌸大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读🥰~ 👨‍💻个人主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专…