Python入门知识:Python模块collections

转载自品略图书馆  http://www.pinlue.com/article/2020/07/0615/0010979777925.html

 

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 dequed = 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 dequeimport itertoolsdef 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")

...END...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值