Python学习基础笔记三十七——collections模块

news/2024/4/20 2:17:30/文章来源:https://blog.csdn.net/chang_chunhua/article/details/128264160

1、collections模块:

内置数据类型:列表list、字典dict、集合set、元组tuple。

Collections模块提供了另外的数据类型:

队列deque、双端队列:可以快速地从另外一侧追加和推出元素;

namedtuple: 生成可以使用名字来访问元素内容的tuple;

Counter:计数器,主要用来计数;

OrderedDict:有序字典;

defaultDict: 带有默认值的字典;

2、namedtuple:

p = (1, 2)     # 这个tuple表示一个坐标
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y', 'z'])
p1 = Point(1, 2, 3)
p2 = Point(3, 2, 1)print(p1.x)
print(p1.y)
print(p1.z)
print(p1)

纸牌的小例子:

from collections import namedtupleCard = namedtuple('card', ['suits', 'number'])# card1 = Card('红桃', 2)
#
# print(card1)
# print(card1.suits)
# print(card1.number)# 打印牌
suits_lst = ['红桃', '梅花', '黑桃', '方块']
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']cards = []
for i in suits_lst:for j in number_list:cards.append(Card(i, j))count = 0
while count < 52:print(cards[count])count += 1if count % 13 == 0:print('')

 运行结果:

 

3、队列:

堆栈:先进后出

队列:先进先出(例子:购票、处理任务等场景)

import queueq = queue.Queue()   # 创建了一个q队列对象,构造函数# 往里面放几个对象
q.put(10)
q.put(5)
q.put(23)# 打印队列
print(q)# 获取队列大小
print("qsize: ", q.qsize())# 取出对象
print(q.get())    # 取到10
print(q.get())    # 取到5
print(q.get())    # 取到23
# print(q.get())    # 阻塞状态,一直运行状态

双端队列:

from collections import dequedq = deque([1, 2])dq.append('a')   # 从后面放入数据  [1, 2, 'a']
dq.appendleft('b')  # 从前面放数据 ['b', 1, 2, 'a']
dq.insert(1, '3')    # 插入一个数3, ['b', 1, 3, 2, 'a']
print(dq.pop())         # 从后面取数据 ['b', 1, 3, 2], 将a取出
print(dq.popleft())     # 从前面取数据 [1, 3, 2], 将b取出print(dq.pop())
print(dq.pop())
print(dq.pop())

说明:

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量很大的时候,插入和删除效率低。

deque是为了高效实现插入和删除操作的双向队列,适用于队列和栈。

deque除了实现list的append()和pop(),还支持appendleft()和popleft(), 这样就可以非常高效地往头部添加和删除元素。

4、有序字典OderedDict:

使用dict的时候,Key是无序的,在对dict做迭代的时候,我们无法确定Key的顺序。

那如果要保持Key的顺序,可以使用OrderedDict:

from collections import OrderedDictd = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)
print(od['a'])for k in od:print(k, od[k])

同样是存储值,字典比列表list占用内存,有序字典更是占用内存,值个数比较多的话,用字典比较消耗内存。购物车可以使用字典。

5、默认字典:

原生字典解决:{'k1': 大于66 , 'k2': 小于66}

values = [11, 22, 33,44,55,66,77,88,99,90]my_dict = {}for value in  values:if value>66:if my_dict.has_key('k1'):my_dict['k1'].append(value)else:my_dict['k1'] = [value]else:if my_dict.has_key('k2'):my_dict['k2'].append(value)else:my_dict['k2'] = [value]

默认字典的解决方法:

from collections import defaultdictvalues = [11, 22, 33,44,55,66,77,88,99,90]my_dict = defaultdict(list)   # 默认是listfor value in  values:if value>66:my_dict['k1'].append(value)else:my_dict['k2'].append(value)defaultdict字典解决方法

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

from collections import defaultdict# 注意下这个lambda没有参数,直接有返回值
dd = defaultdict(lambda : 'N/A')    dd['key1'] = 'abc'
print(dd['key1'])# key2 不存在,就返回默认值
print(dd['key2'])

6、Counter:

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

from collections import Counterc = Counter('abcadsfdfaekadfeadfae')print(c)

只能计算字符串。

通过这个collections,我们可以了解到更多的数据类型和数据结构。

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

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

相关文章

vuex持久化

下载&#xff1a; vuex-persistedstate npm install --save vuex-persistedstate 或者&#xff1a; npm install --save vuex-persistedstate --legacy-peer-deps 引入使用&#xff1a;在store文件夹下的index文件中&#xff0c;也就是放vuex的js代码中引入&#xff1a; i…

Dell电脑搭配Win10休眠 = 黑屏

应该是Dell的硬件和win10操作系统的适配性不行。 Dell黑屏现象 刚买Dell笔记本的时候&#xff0c;就有“黑屏”问题。刚买的一个周、一个月、一年、两年都有这样的问题&#xff0c;而且一个月至少发生一次&#xff1a; 摁了开机键&#xff0c;也开机成功了&#xff0c;电脑就…

【STM32】详解嵌入式中FLASH闪存的特性和代码示例

一、存储器 我们正常编译生成的二进制文件&#xff0c;需要下载烧录到单片机里面去&#xff0c;这个文件保存在单片机的ROM(read only memory)中&#xff0c;所有可以完成这种特性的存储介质都可以称为ROM。 分类 ROM一般分为四大类 ①PROM&#xff1a;可编程只读存储器&#…

Java学习之equals方法练习

目录 第一题 题目要求 我的代码 创建Person类 main类 结果 重写equals 重写后的结果 老师代码 思路 结果 总结 Interger类 源代码 String类 源代码 第二题 运行结果 第三题 知识点 运行结果 第一题 题目要求 判断两个 Person 对象的内容是否相等&#xff0c;…

m基于PSO粒子群算法的重采样算法仿真,对比随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 重采样的主要方法有随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样等。 a.随机采样是一种利用分层统计思想设计出来的&#xff0c;将空间均匀划分&#xff0c;粒子打点后…

青龙面板 香蕉

香蕉角本教程 介绍 香蕉视频 app —【多用户版】 一个账户每天稳定1元&#xff0c;可以自己提现&#xff0c;也可以兑换会员&#xff0c;脚本不停会员也不停&#xff01;可注册多个账户&#xff01;&#xff08;多账户福利自行看文章底部&#xff01;&#xff09; 拉取文件 …

PLC-Recorder实现速度高达0.24ms准确周期采集的方法(带时间戳采集)

目录 1、PLC的发送程序 2、PLC连接配置 3、PLC-Recorder侧的通讯设置 4、PLC-Recorder的通道配置 5、PLC-Recorder的变量配置 6、正常通讯情况的界面 7、记录数据的情况 8、小结 如果要以非常高的速度高速采集各种控制器&#xff08;典型的是PLC&#xff09;的数据&…

攻击类型的攻击次数分布

攻击类型分析 2018 年&#xff0c;主要的攻击类型 1 为 SYN Flood&#xff0c;UDP Flood&#xff0c;ACK Flood&#xff0c;HTTP Flood&#xff0c;HTTPS Flood&#xff0c; 这五大类攻击占了总攻击次数的 96&#xff05;&#xff0c;反射类攻击不足 3%。和 2017 年相比&…

windows下node.js通过N-API调用c++函数

环境准备 vscode安装&#xff08;以下均在vscode中操作&#xff09;node.js安装&#xff0c;版本不要太老c工具链安装&#xff0c;安装Visual Studio2019社区版即可&#xff0c;或者执行 npm install --global windows-build-tools&#xff08;这个我没试过&#xff0c;window…

无需代理及注册在VsCode中使用ChatGPT

无需代理及注册在VsCode中使用ChatGPT 安装 要安装扩展&#xff0c;请按照下列步骤操作&#xff1a; 1.打开 Visual Studio Code 2.单击左侧栏中的扩展程序图标 3.搜索"ChatGPT中文版" 4.点击安装按钮安装扩展 5.重启VSCode 用法 开始使用 在编辑器中右键触发…

mac m1 安装docker docker 安装php 5.6 和 7.2 避坑指南

注意&#xff1a;这个docker一旦下载用起来&#xff0c;没事不要升级&#xff0c;容易导致APP挂载目录找不到&#xff0c;重装非常浪费时间 通过该link可以下载兼容mac m1核心的docker-desktop: Docker Desktop - Docker 所有基于amd64架构核心的都加上--platform linux/amd6…

IEEE 二进制浮点数的表示

今天&#xff0c;我来将 IEEE 二进制浮点数的表示方式进行一个简单的介绍。 浮点数 在 C 语言中&#xff0c;有两种存储浮点数的方式&#xff0c;分别是 float 和 double &#xff0c;当然了还有long double。这几种浮点型所容纳的长度不同&#xff0c;当然它们存储的精度也就…

springBoot中日志的使用

springBoot中日志的使用 日志基础 首先你需要知道日志门面&#xff0c;日志实现&#xff0c;日志桥接器。 基于日志实现&#xff0c;常用的有logback,log4j2&#xff0c;这两个日志实现是的创始人是同一个&#xff0c;概念差不多&#xff0c;这里以log4j2为例&#xff0c;有如…

经矩形窗截断的信号频谱泄露现象研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、频谱泄露现象✳️ 二、原因分析以及解决方法✳️ 三、Matlab程序获取与验证✳️ 一、频谱泄露现象 有一个余弦信号&#xff0c;信号频率30Hz&#xff0c;信号为x(t)cos(2π30t)&#xff0c;采样频率fs128Hz&#xff0c;样本长度分别取N128和N100&…

Android 使用 jni Demo示例

Android 使用 jni Demo示例简介1. NDK的介绍1.1 NDK 简介1.2 NDK 特点2. JNI介绍2.1 JNI 简介2.2 为什么要有 JNI&#xff1f;3. NDK 与 JNI 的关系NDK下载及环境配置1. 使用Android studio SDK Manager下载2.配置NDK2.1 配置环境变量2.2 Android studio配置NDK示例Demo流程1.版…

【云原生】devops之jenkins中pipeline语法(2)

前言&#xff1a; pipeline语法分类一般来说&#xff0c;有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。 二、阶段步骤 &#xff08;1&#xff09;post 根据pipeline块或者stage块&#xff08;阶段&#xff09;完成的状态来进行一个或者多个附加步骤&#xff08;取决…

Gaussian 计算静电云图确定吸附位点

计算背景&#xff1a; 利用高分子有机物等活性材料对有毒分子、原子、离子在真空、水溶液、有机溶液等环境下吸附&#xff0c;已是当今环境科学、矿物学、土壤化学等学科领域研究的热点。但如何确定最佳吸附位点以计算其吸附能就显得尤为重要。 现阶段多数物质的吸附均依据粒…

【通信基础】TTL、RS232、RS485

TTL1、TTL简介RS2321、RS232基本概念2、DB9串口定义及接线参考3、RS232经典电路4、特点RS4851、RS485简介2、特点3、传输距离4、经典电路5、传输差分电平信号TTL 1、TTL简介 TTL的英文全称是Transisor-Transisor Logic. 翻译过来就是晶体管与晶体管之间的逻辑电路。 TTL电平信…

Java搭建宝塔部署实战毕设项目springboot销售培训考评系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目springboot销售培训考评系统源码。 技术架构 技术框架&#xff1a;jQuery MySQL5.7 mybatis shiro Layui HTML CSS JS jpa运行环境&#xff1a;jdk8 IntelliJ…

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代 通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。 # 非迭代例子 n 0 while n < …