首页 > 其他分享 >内置模块之collections

内置模块之collections

时间:2022-10-19 16:27:04浏览次数:50  
标签:deque 内置 OrderedDict 队列 元组 collections 模块 print

内置模块之collections

具名元组:nametuple

具名元组就是对元组和元组元素都命名了。

命名后,除了更好辨识,还可以通过元组元素的名字来取值了(可以不限于索引取值了)

from collections import namedtuple  # 导入具名元组方法
应用场景:二维坐标系
point = namedtuple('点', ('x', 'y'))  # 定义一种元组类型
p1 = point(1, 2)  # 传入参数
print(p1)  # 点(x=1, y=2)  # 此元组展现形式
print(p1.x)  # 1  # 元组内的元素也可以通过点的方式取出
print(p1.y)  # 2

应用场景2:扑克牌
poker = namedtuple('扑克牌', ('花色', '牌值'))
card = poker('♠', 'A')
print(card)  # 扑克牌(花色='♠', 牌值='A')

双端队列:deque

这里涉及队列和堆栈的概念,这是有关数据结构的概念

  • 队列:先进先出FIFO
  • 堆栈:先进后出FIFO

队列通常是在入队时在队尾添加元素,在出队时,队头弹出元素,而双端队列就没有这样的输入输出限制。这里collections模块中的deque就是双端队列。

也可以参照list类型理解为双向列表。

from collections import deque  # 导入deque功能

q1 = deque()  # 定义一个空队列
q1.append(1)  # 与列表的append一致
q1.appendleft(0)  # 从左侧添加元素
print(q1)  # deque([0, 1])

q2 = deque([1, 2, 3])  # 定义一个含元素的队列
print(q2.pop())  # 3
print(q2.popleft())  # 1

q3 = deque([1, 2, 3, 4], 10)  # 定义一个双向队列,并设置最大长度

可以看到deque为我们提供了一个新的数据类型deque,而它对比list增加了左侧添加和左侧弹出的功能。

有序字典:OrderedDict

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

如果要保持Key的顺序,可以用OrderedDict,可以将键值对的顺序保持与插入顺序一致。

from collections import OrderedDict

d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)  # {'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])

默认字典:defaultdict

使用dict时,如果引用的Key不存在,就会抛出KeyError

如果希望key不存在时,返回一个默认值,就可以用defaultdict

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
# 'abc'
dd['key2'] # key2不存在,返回默认值
# 'N/A'

统计:Counter

可以追踪容器类型中元素出现的次数:

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)

# Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

Counter得到的是一种类似字典的数据类型。

标签:deque,内置,OrderedDict,队列,元组,collections,模块,print
From: https://www.cnblogs.com/Leethon-lizhilog/p/16806676.html

相关文章

  • 常见的内置模块
    包的具体使用  导入包里面的模块可以使用from...import...如果使用import...导入包时,则包名下必须包含__init__.py文件该文件内有什么名字就可以......
  • ubuntu20.04内核升级,增加kvm模块
    ubuntu20.04内核升级,增加kvm模块原创 南哥小白 南小白攻防 2022-03-3115:43    本操作主要是升级内核,体验一下源码编译内核的操作步骤。准备虚拟机以及......
  • ModStartCMS v5.0.0 模块市场优化,模型类型修改
    企业内容建站系统ModStartCMSv5.0.0模块市场优化,模型类型修改系统介绍ModStart是一个基于Laravel模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安......
  • 在线问题反馈模块实战(十)​:实现图片预览功能
    ......
  • 文件系统模块3(拆分文件案例)
    //导入constfs=require('fs')constpath=require('path')//匹配正则表达式//样式constregStyle=/<style>[\s\S]*<\/style>///jsconstregScript=/<s......
  • 文件系统模块2(path模块化,)
    1,拼接路径constfs=require('fs')constpath=require('path')fs.readFile(path.join(__dirname,'path'),'utf8',function(err,dataStr){if(err){return......
  • 文件系统模块1(导入,写入)
    1导入fs模块constfs=require('fs')2,读取文件内容fs.readFlie(path,'utf8',function(err,dataStr){console.log(err)console.log('-----')console.log(dataStr)......
  • Python 操作Excel-openpyxl模块使用
    openpyxl的用法实例1.1Openpyxl库的安装使用openpyxl模块是一个读写Excel2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一......
  • 模块
    索引取值与迭代取值的差异索引取值可以按照任意索引位任意次数取值。不支持无序数据类型。迭代取值只能从前往后依此取值无法返回,支持所有数据类型。模块模块简......
  • python基础入门之模块
    python基础入门之模块索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值print(l1[2])#33 可以任意位置任意次数取值,不支持无序类型的数据取值。2.迭......