python的内建模块collections有几个关键的数据结构,平常在使用的时候,开发者可以直接调用,不需要自己重复制造轮子,这样可以提高开发效率。

1. deque双端队列

平常我们使用的python内置list类的append,extend,pop方法都是从list的尾部执行的(pop()默认弹出最后一个元素)。在使用的时候,list很像是一种栈结构(LIFO)。不同的是list灵活性更强,在栈的基础上有动态插入的方法,即insert(index,obj)和索引、切片等操作。强大的list似乎也可以实现队列(FIFO),但由于它实在太灵活了,列表中的元素极容易改变,在使用时令人总是不那么放心。为了实现更好的队列结构,一般程序员会自己实现一个类。

collections模块中为我们提供的双端队列是在队列的基础上实现头尾两端可append、可pop。另外还有insert,rotate等方法,也是相当灵活的

关键方法:

append()          #从右端添加元素(与list同)

appendleft()       #从左端添加元素(与list同)

extend()          #从右端逐个添加可迭代对象(与list同)

extendleft()       #从左端逐个添加可迭代对象(与list同)

pop()             #从右端弹出元素(与list同)

popleft()          #从左端弹出数据

count()           #统计队列中的元素个数(与list同)

insert(index,obj)    #在指定位置插入元素(与list同)

rotate()           #旋转队列

基本使用例子:

from  collections import deque

d = deque()
#增加数据
d.append('')
d.append('')
d.appendleft('')
l = ['','']
d.extend(l)
d.extendleft(l)
print(d) #计算deque元素个数
print(d.count('')) #循环移动
d.rotate(1)
print(d)
d.rotate(-1)
print(d)

#计算股票和仓库存货常用的移动平均数

from collections import deque
import itertools
def moving_average(iterable,n=3):
it = iter(iterable)
d = deque(itertools.islice(it,n-1)) #迭代出前2个数据
print(d)
d.appendleft(0) #防止第一次运行算法时候把第一个数据删除
s = sum(d)
print(d)
print(s)
for elem in it:
s += elem-d.popleft()
d.append(elem)
yield s/float(n) l = [10,20,18,27,15]
for average in moving_average(l):
print(average)

2. defaultdict  默认字典

我们平常在使用python内置的dict的时候,根据键key去查询对应的value值,如果不存在对应的key,会报错(KeyError)。但是在defaultdict就会会出现这个问题。

例子:

dd = defaultdict(lambda:"none")    #只需要在定义的时候为不存在的key定义指定的显示值
dd["a"] = "apple"
dd["b"] = "banana" print(dd["c"])
print(dd) 结果:
>>>none
>>>defaultdict(<function <lambda> at 0x0000023B1C1919D8>, {'c': 'none', 'a': 'apple', 'b': 'banana'})

由第二条的结果可以看出,defaultdict将不存在的键专门用一个字典来存放,而存在的键存放在另外一个字典中。当需要查询元素时,如果遇到没有的键key,就会获取第一字典中预先设定好的显示值。

3. OrderDict  有序字典

在使用python内置的dict时,用print()打印出整个字典,会发现前后两次字典的键值对顺序是不一样的(笔者猜测是前后两次的hash值不一样的缘故)。而在有序字典OderDict中,这种现象不会在发生。

例子:

od = OrderedDict()
od[""] = "one"
od[""] = "two"
od[""] = "three"
od[""] = "four"
od[""] = "five" 结果:
OrderedDict([('', 'one'), ('', 'two'), ('', 'three'), ('', 'four'), ('', 'five')])

python模块--collections的更多相关文章

  1. python模块collections中namedtuple()的理解

    Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.相比与list,tuple中的元素不可修改,在映射中可以当键使用.tuple元组的item只能通过index ...

  2. Python 模块collections

    1.深入理解python中的tuple的功能 基本特性 # 可迭代 name_tuple = ('0bug', '1bug', '2bug') for name in name_tuple: prin ...

  3. 不可不知的Python模块: collections

    原文:http://www.zlovezl.cn/articles/collections-in-python/ Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想 ...

  4. python模块--collections(容器数据类型)

    Counter类(dict的子类, 计数器) 方法 返回值类型 说明 __init__ Counter 传入可迭代对象, 会对对象中的值进行计数, 值为键, 计数为值 .elements() 迭代器 ...

  5. Python中collections模块

    目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...

  6. Python之常用模块--collections模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  7. 【转】python模块分析之collections(六)

    [转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...

  8. Python的collections模块中namedtuple结构使用示例

      namedtuple顾名思义,就是名字+元组的数据结构,下面就来看一下Python的collections模块中namedtuple结构使用示例 namedtuple 就是命名的 tuple,比较 ...

  9. python常用模块collections os random sys

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

随机推荐

  1. 【Hadoop】3、Hadoop-MapReduce使用avro进行数据的序列化与反序列化

    package cn.cutter.demo.hadoop.avro; import org.apache.hadoop.io.Text; import java.text.DateFormat; i ...

  2. (转)db2top详解

    原文:https://blog.csdn.net/lyjiau/article/details/47804001 https://www.ibm.com/support/knowledgecenter ...

  3. Jenkins系列之七——前端app自动打包

    了两周终于搞掂了,期间各种搜教程.各种懵逼,各种坑对小白来还是很难的额.废话不多说直接开撸~~~ 一.介绍下什么是Gradle Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持m ...

  4. 分布式事务解决方案以及 .Net Core 下的实现(上)

    数据一致性是构建业务系统需要考虑的重要问题 , 以往我们是依靠数据库来保证数据的一致性.但是在微服务架构以及分布式环境下实现数据一致性是一个很有挑战的的问题.最近在研究分布式事物,分布式的解决方案有很 ...

  5. Kubernetes 基于 Metrics Server 与 HPA 的使用

    在 Kubernetes 中可以手动通过 kubectl scale 命令或通过修改 replicas 数量,可以实现 Pod 的扩容或缩容.Kubernetes 中还提供了 HPA(Horizont ...

  6. leetcode — search-a-2d-matrix

    /** * Source : https://oj.leetcode.com/problems/search-a-2d-matrix/ * * * Write an efficient algorit ...

  7. leetcode — powx-n

    /** * Source : https://oj.leetcode.com/problems/powx-n/ * * Created by lverpeng on 2017/7/18. * * Im ...

  8. 基于vue技术的企业移动办公系统的设计与实现

    如何打包: http://www.cnblogs.com/smilehuanxiao/p/7693858.html http://www.cnblogs.com/1314y/p/6207153.htm ...

  9. PAT之写出这个数

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100^. 输出格式:在一行内输出n的各位数字之和 ...

  10. [转]php 图片验证码生成 前后台验证

    本文转自:https://www.cnblogs.com/xiaoyezi/p/3541195.html 自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一 ...