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

news2024/9/23 15:19:15

1、collections模块:

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

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

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

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

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

OrderedDict:有序字典;

defaultDict: 带有默认值的字典;

2、namedtuple:

p = (1, 2)     # 这个tuple表示一个坐标
from collections import namedtuple

Point = 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 namedtuple

Card = 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 += 1
    if count % 13 == 0:
        print('')

 运行结果:

 

3、队列:

堆栈:先进后出

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

import queue

q = 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 deque

dq = 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 OrderedDict

d = 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 defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)   # 默认是list

for 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 Counter

c = Counter('abcadsfdfaekadfeadfae')

print(c)

只能计算字符串。

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

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

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

相关文章

游戏开发53课 阴影

4.8 阴影 阴影的实现方式有很多种&#xff0c;消耗和效果各异。 4.8.1 贴图阴影 贴图的方式最简单&#xff0c;做法是制作一张阴影纹理&#xff0c;放到物体脚下&#xff08;下图&#xff09;&#xff0c;跟随物体一起运动。 贴图阴影渲染非常简单&#xff0c;只需要两个三角…

智能聊天机器人技术研究与应用

文章大纲 1. 聊天机器人简介聊天机器人进化历史聊天机器人核心技术2. 预训练模型与聊天机器人研究进展transfomer 架构回顾预训练对话模型3. 知识图谱与智能问答4. 智能聊天机器人应用实践5. 总结与展望正确使用chatGPT“高端的食材往往只需要最朴素的烹饪方式”参考文献与学习…

OpenFeign使用

OpenFeign使用 在微服务的架构中&#xff0c;传统的http客户端如Httpclient Okhttp HttpURLConnection RestTemplate WebClient 显然不适合。毕竟需要动态的获取服务地址&#xff0c;和进行负载均衡调用。 RPC框架 PC 全称是 Remote Procedure Call &#xff0c;即远程过程调…

NTC-Templates解析与采集H3C(Comware Version 7)信息

本文仅供本人参考与学习NTC-Templates模板使用。 设备环境&#xff1a;HCL S6850 S5820V2-54QS-GE&#xff1b;Version 7.1.075, Alpha 7571 模板采用&#xff1a;hp_comware_display_xxxxxxxx.textfsm 在线模板测试&#xff1a;https://textfsm.nornir.tech/ hp_comware_d…

httpbin的使用

在学习过程中我们想知道我们发送处的http格式是什么样子的&#xff0c;是否符合我们的要求&#xff0c;寻找一个这样的工具&#xff0c;满足验证测试需要。 Httpbin服务可以满足查看我发出去的请求到底是什么样子的。你需要查看请求中的那部分信息&#xff0c;就调用什么样的接…

【Qt入门第37篇】 网络(七)TCP(一)

导语 TCP即TransmissionControl Protocol&#xff0c;传输控制协议。与UDP不同&#xff0c;它是面向连接和数据流的可靠传输协议。也就是说&#xff0c;它能使一台计算机上的数据无差错的发往网络上的其他计算机&#xff0c;所以当要传输大量数据时&#xff0c;我们选用TCP协议…

游戏开发45课 性能优化4

2.6 粒子 粒子特效也是性能的一个大杀手&#xff0c;主要体现在&#xff1a; 每帧计算量大。涉及发射器/效果器/曲线插值等&#xff0c;耗费CPU性能。频繁操作内存。粒子在生命周期里&#xff0c;实例持续不断地创建/删除&#xff0c;即便有缓存机制下&#xff0c;依然避免不…

算法day43|1049,494,474

1049. 最后一块石头的重量 II class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:summ sum(stones)target summ//2#dp下标和数组的定义,dp[j]代表的是最大价值dp [0]*15001#递归公式for i in range(len(stones)):for j in range(target,stones[i]-…

Zero-Shot Learning across Heterogeneous Overlapping Domains

极简论文阅读 摘要 a zero-shot learning approach:零样本学习方法。 natural language understanding domain&#xff1a;自然语言处理域。 a given utterance&#xff1a;给定的话语。 domains at runtime&#xff1a;运行时的域。 utterances and domains 给定话语和域。 …

Yolact

YOLACT 1.Abstract 原理: 生成一组 prototype masks (原型掩码) 个数&#xff08;nm&#xff09;可自定义&#xff0c;基于protonet的最后一组卷积核个数 通过一组 coefficients (掩码系数) 预测每个 instance mask (输出mask) 掩码系数由head层输出&#xff0c;shape为&…

微服务框架 SpringCloud微服务架构 微服务保护 32 隔离和降级 32.2 线程隔离

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护32 隔离和降级32.2 线程隔离32.2.1 线程隔离32.2.2 优缺点对比32 隔离和降级 32.2 线程隔离 32.…

算法7:平衡二叉树(AVLTree)

二叉排序树&#xff08;BST, Binary Sort Tree&#xff09;也称二叉查找树&#xff08;Binary Search Tree&#xff09;, 或二叉搜索树。 定义&#xff1a;一颗二叉树&#xff0c;满足以下属性&#xff1a; 左子树的所有的值小于根节点的值右子树的所有值大于根节点的值左、右…

关键词(四)

关键词&#xff08;四&#xff09;一.具有争议的关键词—goto二.“空”的关键字—void1.void为什么不能定义变量2.void修饰函数返回值和参数3.void指针一.具有争议的关键词—goto goto语句非常灵活&#xff0c;其实就是从goto这个位置直接跳转到goto后面的那个数据&#xff08;…

单例模式、工厂模式

单例模式、一、单例模式1.1 饿汉模式1.1.1 实现1.1.2 补充1.2 懒汉模式1.2.1 单线程版1.2.2 多线程版二、工厂模式一、单例模式 单例模式是校招中最常考的设计模式之一。 啥是设计模式&#xff1f; 设计模式好比象棋中的"棋谱"&#xff1a;红方当头炮&#xff0c;黑…

软件测试人员究竟要掌握什么技能?顺便说下行业现状

最近团队内部产品在做性能测试中碰到一个问题&#xff0c;不仅仅这次性能测试&#xff0c;其实这在我这近10年工作过程中&#xff0c;经常碰到一些类似的事情&#xff0c;今天拿出来一件事说叨说叨。 1、事情经过 月中上线了一个功能&#xff0c;该功能会应对峰值流量&#x…

【安卓APP源码和设计报告(含PPT)——订餐系统

订餐系统实验报告 课程名称&#xff1a; Android程序设计 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 任课教师&#xff1a; 程序功能与环境&#xff08;服务器&#xff0c;手机实物照片&#xff0c;自己拍&#xff09; 程序功能 餐厅订餐系统服务器&#…

45. python %占位符格式化处理

45. %占位符格式化处理 文章目录45. %占位符格式化处理1.课题导入2. %占位符概念3. %d格式化为整数3.1 %d将整数格式化到指定位置3.2 %d将浮点数格式化为整数1. 知识回顾&#xff1a;用int函数将浮点数转换为整数2. 用%将浮点数格式化为整数4. %s格式化为字符串4.1 %s将整数格式…

论文笔记-时序预测-Triformer

论文标题&#xff1a; Triformer: Triangular, Variable-Specific Attentions for Long Sequence Multivariate Time Series Forecasting 论文链接&#xff1a; https://arxiv.org/abs/2204.13767v1 代码链接&#xff1a; https://github.com/razvanc92/triformer 摘要 各种现…

[附源码]计算机毕业设计基于JEE平台springbt技术的订餐系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spring源码解析-环境变量

“不积跬步&#xff0c;无以至千里”。 今天聊一聊Spring中环境变量的动态添加和填充Bean属性的时候一些带“$”符号的属性值的解析问题。 因为最近做项目的时候发现了一个有意思的问题&#xff0c;之前也没关注过。因为项目中使用的容器类型是GenericXmlApplicationContext&a…