collection 
  定义命名元祖,让元祖的每个元素可以通过类似对象属性的方法用".属性"及其方便的取值.
  定义可前后拿取值且可迭代的双端队列
  定义有顺序的字典
  定义有默认值的字典 ps:
  队列 :先进先出
  堆栈 :先进后出 具体用到的或者可能用到总之都要了解的方法:
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数,只能计算字符串,没啥用,滚滚滚一边玩去
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典 需要用到的模块
 import collections    

namedtuple: 定义命名元祖
 from collections import namedtuple                # 当只用namedtuple的时候可以只调用这个方法
Point = namedtuple("point",["x","y","z"])   # 只引入方法的时候可以直接用方法就可以,引入模块需要先调用模块在调方法
# 起个名字需要,后面要
p = Point(1,2,3)            # 必须与你定义的时候的一一对应,不可多不可少
print(p.x) #
print(p.y) #
print(p)   #
简单的小示例
  花色和数字
 Card = namedtuple("card",["suits","number"])
c1 = Card("红心",2)
print(c1) # card(suits='红心', number=2)
print(c1.number) #
print(c1.suits) # 红心

再说 deque之前先说修下 普通的队列 queue
  队列
    先进先出FIFO
    队列不能循环
    不是迭代器
    无法用for     # TypeError: 'Queue' object is not iterable
    也无法插入内容
 import queue
q = queue.Queue() # 定义一个队列
q.put(10) # put不能放多个值,一次只能放一个值
q.put(5)
q.put(6)
print(q.qsize())      # 3 # 查看队列的大小
# for i in q: # 直接标黄 是不可迭代的
# print(i)  # TypeError: 'Queue' object is not iterable
print(q)   #<queue.Queue object at 0x00000000023E60F0> # 无法查看的,只能看到内存地址
print(q.get()) #
print(q.get()) #
print(q.get()) #
print(q.get()) # 阻塞,没数据可拿。直到你给我一个值我才继续走
双端队列 
  可以从前拿
  从后拿
  从前添加
  从后添加
  不能从中间拿  
  可以通过索引的方式指定位置添加,即可以中间加值
  可迭代
  可for 循环
 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) # 在索引1的位置插入数据 deque(['b', 3, 1, 2, 'a'])
print(dq)
print(dq.pop()) # 从后面弹出
print(dq.popleft()) # 从前面弹出
print(dq) # deque([3, 1, 2]) # 是可以看到里面的内容的,不太安全啊
for i in dq: # 双端队列是可以迭代的
print(i) # 3 1 2


有序字典:
  用OrderedDict会根据放入元素的 先后顺序 进行排序
 from collections import OrderedDict
# # 普通的字典是无序的输出是随机数据
d = dict([("a",1),("b",2),("c",3)])     # 是不是觉得这种字典定义方式很陌生,其实我也觉得,挺麻烦的.
print(d.values())              # 1 3 2
od = OrderedDict([("a",1),("b",2),("c",3)]) # 并不是说非要用这种方式创建 # a = OrderedDict() # 用这种创建之后再加键值对的方式也是可以的
# print(a) # OrderedDict()
# a["a"] ="lalal"
# print(a) # OrderedDict([('a', 'lalal')]) print(od.items()) # odict_items([('a', 1), ('b', 2), ('c', 3)])
print(od.values()) # odict_values([1, 2, 3])
for k,v in od.items():  # 是可以迭代的
print(k)
print(v)
# a
#
# b
#
# c
#
  关于有序字典需要注意的是:
    不同顺序的有序字典尽管值相同,但是顺序不同也会被认为是不同的有序字典
 print ('Regular dictionary:')
d2={}
d2['a']='A'
d2['b']='B'
d2['c']='C'
d3={}
d3['c']='C'
d3['a']='A'
d3['b']='B'
print(d2 == d3) # True print ('\nOrderedDict:')
d4=collections.OrderedDict()
d4['a']='A'
d4['b']='B'
d4['c']='C'
d5=collections.OrderedDict()
d5['c']='C'
d5['a']='A'
d5['b']='B'
print (d4==d5) # False


defaultdict 带默认值的字典
  用于规避 取字典中不存在的键值对会导致报错的问题  
       在取不存在的值的时候 返回一个默认值避免报错
 from collections import defaultdict
a = dict([("a",1),("b",2)])
print(a["a"]) #
print(a["b"]) #
# print(a["c"]) # KeyError: 'c'
a = defaultdict(lambda :"不存在的值",[("a",1),("b",2)]) # defaultdict的默认值可以是任何,字典元祖都可以,
# a = defaultdict(5,[("a",1),("b",2)]) # TypeError: first argument must be callable or None
  # 但是就是不能为一个确定值,想要确定值作为默认值,可以用匿名函数直接返回
print(a["a"]) #
print(a["b"]) #
print(a["c"]) # 不存在的值

												

day22 collection 模块 (顺便对比queue也学习了一下队列)的更多相关文章

  1. python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

    1.队列(queue) 用法: import queue q = queue.Queue() #先进先出模式 q.put(1) #存放数据在q里 作用: 1)解耦    2)提高效率 class qu ...

  2. Backbone源码解析(三):Collection模块

    Collection模块式是对分散在项目中model的收集,他可以存储所有的model,构成一个集合,并且通过自身的方法统一操作model.Collection模块包装着若干对象,对象本身不具有一些方 ...

  3. [Java] LinkedList / Queue - 源代码学习笔记

    简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...

  4. python双端队列-collection模块

    双端队列(double-ended queue,或者称deque)在需要按照元素增加的顺序来移除元素时非常有用.其中collection模块,包括deque类型. 使用实例:

  5. collection 模块 双端队列

    单端队列 用于同一进程中的队列,可以叫做单进程队列. queue 遵循先进先出,先进去的必须先出来 1.先进先出: impore queue q = queue.Queue() 实例化一个对象 q.p ...

  6. Python collection模块与深浅拷贝

    collection模块是对Python的通用内置容器:字典.列表.元组和集合的扩展,它包含一些专业的容器数据类型: Counter(计数器):dict子类,用于计算可哈希性对象的个数. Ordere ...

  7. day0320 时间模块 collection模块

    一. TIME模块 python提供了一个time和calendar模块可以用于格式化日期和时间. 时间间隔一秒为单位. 每个时间戳都以1970年1月1日午夜经过多长时间来表示. 1.时间戳 函数ti ...

  8. day 20 collection模块 time 模块 os 模块

    一.collection模块 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要 ...

  9. 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架

    http://geek.csdn.net/news/detail/139235 说到近期的深度学习框架,TensorFlow火的不得了,虽说有专家在朋友圈大声呼吁,不能让TensorFlow形成垄断地 ...

随机推荐

  1. git 用法---成功添加一个文件到github

    一.git 提交 全部文件 git add . git add xx命令可以将xx文件添加到暂存区,如果有很多改动可以通过 git add -A .来一次添加所有改变的文件.注意 -A 选项后面还有一 ...

  2. Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开

    传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...

  3. SqlServer 案例:已有汽车每日行驶里程数据,计算其每日增量

    需求说明 某公司某项业务,需要获得用户每日行车里程数.已知能获得该车每日提交的总里程数,如何通过 T-SQL 来获得其每日增量里程? 解决方案 首选需要对数据进行编号,利用开窗函数 OVER() 实现 ...

  4. MySQL高可用方案MHA在线切换的步骤及原理

    在日常工作中,会碰到如下的场景,如mysql数据库升级,主服务器硬件升级等,这个时候就需要将写操作切换到另外一台服务器上,那么如何进行在线切换呢?同时,要求切换过程短,对业务的影响比较小. MHA就提 ...

  5. Shell编程基础篇-上

    1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...

  6. 常见 Bash 内置变量介绍

    目录 $0$1, $2 等等$#$* 与 "$*"$@ 与 "$@"$!$_$$$PPID$?$BASH$BASH_VERSION$EUID 与 $UID$GR ...

  7. PHP 设置调试工具XDebug PHPStorm IDE

    先下载PHP扩展Xdebug https://xdebug.org, 可以复制自己的phpinfo粘贴到https://xdebug.org/wizard.php中, 会生成需要下载的版本, php. ...

  8. Linux常用指令【转载】

    [收藏]Linux常用指令[转载] $ 命令行提示符 粗体表示命令 斜体表示参数 filename, file1, file2 都是文件名.有时文件名有后缀,比如file.zip command 命令 ...

  9. ros-安装

    1.安装了ubuntu for ros. 运行评论下边那条命令: 2.rtabamp 3.准备安装机器人导航仿真系统:https://blog.csdn.net/wangchao7281/articl ...

  10. 个人github链接及git学习心得总结

    个人github链接 https://www.github.com/liangjianming/test git学习心得总结​ git是一个快速,开源,分布式的版本控制系统. GitHub是一个基于w ...