pythoncollections模块使用方法

collections模块实现一些特定的数据类型,可以替代Python中常用的内置数据类型如dict, list, set, tuple,简单说就是对基本数据类型做了更上一层的处理。

站在用户的角度思考问题,与客户深入沟通,找到岫岩网站设计与岫岩网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖岫岩地区。

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 
  
    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')])

网站题目:pythoncollections模块使用方法
网页路径:http://www.shufengxianlan.com/qtweb/news23/535373.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联