专栏首页python3python模块--collection

python模块--collection

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('1')
d.append('2')
d.appendleft('3')
l = ['4','5']
d.extend(l)
d.extendleft(l)
print(d)

#计算deque元素个数
print(d.count('5'))

#循环移动
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["1"] = "one"
od["2"] = "two"
od["3"] = "three"
od["4"] = "four"
od["5"] = "five"

结果:
OrderedDict([('1', 'one'), ('2', 'two'), ('3', 'three'), ('4', 'four'), ('5', 'five')])

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python爬虫之12306网站--火车

    1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息

    py3study
  • 从 Python到Tensorflow

    前者会输出False,而后者会输出None.可以在get函数参数指定想要得到的value(如何找不到对应的value,则输出预设的值)

    py3study
  • 学习笔记-小甲鱼Python3学习第一讲

    ----------------------分割线,啦啦啦----------------------- 动动手 0、动手试试直接输入 >>>5+8 与输入 >...

    py3study
  • Python之从列表推导到zip()函数的五种技巧

    这 5几种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 几个技巧非常实用。

    Python知识大全
  • 学习笔记-小甲鱼Python3学习第一讲

    ----------------------分割线,啦啦啦----------------------- 动动手 0、动手试试直接输入 >>>5+8 与输入 >...

    py3study
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会!

    最开始学 Python 时,如果我能掌握这些方法,那么代码看起来会更加优美。在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这...

    1480
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会

    在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 5 个技巧非常实用。

    CDA数据分析师
  • 学Python,从列表推导到zip()函数,这五种技巧应知应会

    机器之心已经介绍过很多 Python 教程,从非常齐备的长教程:一文掌握 Python 关键代码,到一些好玩的小技巧:Python 技巧 101,它们从不同的层...

    机器之心
  • Win7下IIS中配置Python脚本运

    1、安装Python和IIS 2、打开IIS,在IIS中选中需要配置Python的站点

    py3study
  • 变量类型-List

    教程: 一:列表的创建     List(列表) 是 Python 中使用最频繁的数据类型。列表中元素的类型可以不相同,数字,字符串甚至可以包含列表(所谓嵌套...

    py3study

扫码关注云+社区

领取腾讯云代金券