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

python collections模块

发布时间:2020-12-17 00:02:18 所属栏目:Python 来源:网络整理
导读:基本介绍 : 生成可以使用名字来访问元素内容的tuple子类 : 双端队列,可以快速的从另外一侧追加和推出对象 : 计数器,主要用来计数 : 有序字典 : 带有默认值的字典 ? collections() div class="cnblogs_code" collections birth = namedtuple(span style="co

基本介绍

    : 生成可以使用名字来访问元素内容的tuple子类
  • : 双端队列,可以快速的从另外一侧追加和推出对象
  • : 计数器,主要用来计数
  • : 有序字典
  • : 带有默认值的字典

?

collections()

<div class="cnblogs_code">


 collections birth = namedtuple(<span style="color: #800000;">"<span style="color: #800000;">Struct_time<span style="color: #800000;">",[<span style="color: #800000;">"<span style="color: #800000;">year<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">month<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">day<span style="color: #800000;">"<span style="color: #000000;">])
b1 = birth(2018,9,5<span style="color: #000000;">)
<span style="color: #0000ff;">print(type(b1)) <span style="color: #008000;">#<span style="color: #008000;"> <class 'main.Struct_time'>
<span style="color: #0000ff;">print(b1.year) <span style="color: #008000;">#<span style="color: #008000;"> 2018
<span style="color: #0000ff;">print(b1.month) <span style="color: #008000;">#<span style="color: #008000;"> 9
<span style="color: #0000ff;">print(b1.day) <span style="color: #008000;">#<span style="color: #008000;"> 5
<span style="color: #0000ff;">print(b1) <span style="color: #008000;">#<span style="color: #008000;"> Struct_time(year=2018,month=9,day=5)

<span style="color: #008000;">#<span style="color: #008000;"> 可命名元组非常类似一个只有属性没有方法的类<span style="color: #008000;">

<span style="color: #008000;"> ['year','month','day']是对象属性名<span style="color: #008000;">

<span style="color: #008000;"> Struct_time是类 的名字<span style="color: #008000;">

<span style="color: #008000;"> 这个类最大的特点就是一旦实例化 不能修改属性的值

depue? 双端队列

deque其实是??的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象:?,??。

你可能会说,原生的list也可以从头部添加和取出对象啊?就像这样:

li = [2,3,4666(li) (li[0])

但是值得注意的是,list对象的这两种用法的时间复杂度是??,也就是说随着元素数量的增加耗时呈 线性上升。而使用deque对象则是??的复杂度,所以当你的代码有这样的需求的时候, 一定要记得使用deque。

作为一个双端队列,deque还提供了一些其他的好用方法,比如??等。

<span style="color: #0000ff;">import<span style="color: #000000;"> sys
<span style="color: #0000ff;">import<span style="color: #000000;"> time
<span style="color: #0000ff;">from collections <span style="color: #0000ff;">import<span style="color: #000000;"> deque
fancy_loading = deque(<span style="color: #800000;">"<span style="color: #800000;">>-------------------------<span style="color: #800000;">"<span style="color: #000000;">)
<span style="color: #0000ff;">while 1<span style="color: #000000;">:
<span style="color: #0000ff;">print(<span style="color: #800000;">"<span style="color: #800000;">r%s<span style="color: #800000;">" % <span style="color: #800000;">""<span style="color: #000000;">.join(fancy_loading)),fancy_loading.rotate(1<span style="color: #000000;">)
sys.stdout.flush()
time.sleep(0.08<span style="color: #000000;">)

运行结果: <span style="color: #008000;">#<span style="color: #008000;">一个无尽循环的跑马灯


->>------------------------
-->>-----------------------
--->>----------------------
---->>---------------------
----->>--------------------
------>>-------------------

Counter

计数器是一个非常常用的功能需求,collections也贴心的为你提供了这个功能.

<span style="color: #0000ff;">from collections <span style="color: #0000ff;">import<span style="color: #000000;"> Counter

s = <span style="color: #800000;">"""<span style="color: #800000;">A Counter is a dict subclass for counting hashable objcts.
It is an unordered collection where elements are stored as dictionary
keys and their counts are stored as dictionary values.
Counts are allowed to be any integer value including zero or negative
counts.
The Counter class is similar to bags or multisets in other languages.<span style="color: #800000;">"""<span style="color: #000000;">
.lower()
c =<span style="color: #000000;"> Counter(s)
<span style="color: #008000;">#<span style="color: #008000;"> 获取出现频率最高的5个字符
<span style="color: #0000ff;">print(c.most_common(5)) <span style="color: #008000;">#<span style="color: #008000;"> [(' ',55),('e',31),('s',25),('a',24),('t',24)]

OrderedDict

在Python2中,dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了。

python2:

collections items =<span style="color: #000000;"> (
(
<span style="color: #800000;">'
<span style="color: #800000;">A
<span style="color: #800000;">'
,1<span style="color: #000000;">),(<span style="color: #800000;">'<span style="color: #800000;">B<span style="color: #800000;">',2<span style="color: #000000;">),(<span style="color: #800000;">'<span style="color: #800000;">C<span style="color: #800000;">',3<span style="color: #000000;">)
)

regular_dict =<span style="color: #000000;"> dict(items)
ordered_dict =<span style="color: #000000;"> OrderedDict(items)

<span style="color: #0000ff;">print <span style="color: #800000;">'<span style="color: #800000;">Regular Dict:<span style="color: #800000;">'
<span style="color: #0000ff;">for k,v <span style="color: #0000ff;">in<span style="color: #000000;"> regular_dict.items():
<span style="color: #0000ff;">print<span style="color: #000000;"> k,v

<span style="color: #0000ff;">print <span style="color: #800000;">'<span style="color: #800000;">Ordered Dict:<span style="color: #800000;">'
<span style="color: #0000ff;">for k,v <span style="color: #0000ff;">in<span style="color: #000000;"> ordered_dict.items():
<span style="color: #0000ff;">print<span style="color: #000000;"> k,v

<span style="color: #008000;">#<span style="color: #008000;"> 运行结果:
<span style="color: #000000;">Regular Dict:
A 1<span style="color: #000000;">
C 3<span style="color: #000000;">
B 2<span style="color: #000000;">
Ordered Dict:
A 1<span style="color: #000000;">
B 2<span style="color: #000000;">
C 3

defaultdict

我们都知道,在使用Python原生的数据结构dict的时候,如果用??这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。

但是,如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。

collections = [,,,= sex,name <span style="color: #0000ff;">print(result) <span style="color: #008000;">#<span style="color: #008000;"> defaultdict(<class 'list'>,{'male': ['John','Jack','Lily'],'female': ['Lily','Lucy']})

上面只是非常简单的介绍了一下collections模块的主要内容,主要目的就是当你碰到适合使用 它们的场所时,能够记起并使用它们,起到事半功倍的效果。

(编辑:李大同)

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

    推荐文章
      热点阅读