加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python模块--collections

发布时间:2020-12-17 00:16:10 所属栏目:Python 来源:网络整理
导读:python的内建模块collections有几个关键的数据结构,平常在使用的时候,开发者可以直接调用,不需要自己重复制造轮子,这样可以提高开发效率。 1. deque 双端队列 平常我们使用的python内置list类的append,extend,pop方法都是从list的尾部执行的(pop()默

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: #0000ff">print(d.count(<span style="color: #800000">'<span style="color: #800000">5<span style="color: #800000">'<span style="color: #000000">))

<span style="color: #008000">#<span style="color: #008000">循环移动
d.rotate(1<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000">(d)
d.rotate(-1<span style="color: #000000">)
<span style="color: #0000ff">print(d)

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

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)

结果:
>>><span style="color: #000000">none
>>>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">'
)])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读