python模块--collections
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() ??????????#旋转队列 基本使用例子: collections d =<span style="color: #000000"> deque()
<span style="color: #008000">#<span style="color: #008000">增加数据 d.append(<span style="color: #800000">'<span style="color: #800000">1<span style="color: #800000">'<span style="color: #000000">) d.append(<span style="color: #800000">'<span style="color: #800000">2<span style="color: #800000">'<span style="color: #000000">) d.appendleft(<span style="color: #800000">'<span style="color: #800000">3<span style="color: #800000">'<span style="color: #000000">) l = [<span style="color: #800000">'<span style="color: #800000">4<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">5<span style="color: #800000">'<span style="color: #000000">] d.extend(l) d.extendleft(l) <span style="color: #0000ff">print<span style="color: #000000">(d) <span style="color: #008000">#<span style="color: #008000">计算deque元素个数 <span style="color: #008000">#<span style="color: #008000">循环移动 #计算股票和仓库存货常用的移动平均数 collections moving_average(iterable,n=3== deque(itertools.islice(it,n-1))
s = elem += elem- s/l = [10,20,18,27,15<span style="color: #000000">]
<span style="color: #0000ff">for average <span style="color: #0000ff">in<span style="color: #000000"> moving_average(l): <span style="color: #0000ff">print(average) 2. defaultdict? 默认字典 我们平常在使用python内置的dict的时候,根据键key去查询对应的value值,如果不存在对应的key,会报错(KeyError)。但是在defaultdict就会会出现这个问题。 例子: dd = defaultdict(:)
dd[] = ] =
<span style="color: #0000ff">print (dd[<span style="color: #800000">"<span style="color: #800000">c<span style="color: #800000">"<span style="color: #000000">])<span style="color: #0000ff">print<span style="color: #000000">(dd) 结果: >>>defaultdict(<function <<span style="color: #0000ff">lambda> at 0x0000023B1C1919D8>,{<span style="color: #800000">'<span style="color: #800000">c<span style="color: #800000">': <span style="color: #800000">'<span style="color: #800000">none<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">a<span style="color: #800000">': <span style="color: #800000">'<span style="color: #800000">apple<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">b<span style="color: #800000">': <span style="color: #800000">'<span style="color: #800000">banana<span style="color: #800000">'}) 由第二条的结果可以看出,defaultdict将不存在的键专门用一个字典来存放,而存在的键存放在另外一个字典中。当需要查询元素时,如果遇到没有的键key,就会获取第一字典中预先设定好的显示值。 3. OrderDict ?有序字典 在使用python内置的dict时,用print()打印出整个字典,会发现前后两次字典的键值对顺序是不一样的(笔者猜测是前后两次的hash值不一样的缘故)。而在有序字典OderDict中,这种现象不会在发生。 例子: od =] = ] = ] = ] = ] = 结果: OrderedDict([(<span style="color: #800000">'<span style="color: #800000">1<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">one<span style="color: #800000">'),(<span style="color: #800000">'<span style="color: #800000">2<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">two<span style="color: #800000">'),(<span style="color: #800000">'<span style="color: #800000">3<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">three<span style="color: #800000">'),(<span style="color: #800000">'<span style="color: #800000">4<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">four<span style="color: #800000">'),(<span style="color: #800000">'<span style="color: #800000">5<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">five<span style="color: #800000">')]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |