博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day22 collection 模块 (顺便对比queue也学习了一下队列)
阅读量:6124 次
发布时间:2019-06-21

本文共 3795 字,大约阅读时间需要 12 分钟。

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

 

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

 

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

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

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

 

转载于:https://www.cnblogs.com/shijieli/p/9908962.html

你可能感兴趣的文章
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
BZOJ 2190[SDOI2008]仪仗队
查看>>
图解SSH原理及两种登录方法
查看>>
[转载] 七龙珠第一部——第058话 魔境圣地
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
P127、面试题20:顺时针打印矩阵
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
【FJOI2015】金币换位问题
查看>>