Collections 是 Python 内建的一个集合模块,提供了许多额外的数据类型。

namedtuple

namedtuple 主要用来生成可以使用名称来访问元素的数据对象,通常用来增强代码的可读性。

namedtuple 是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,可以用属性而不是索引来写入或者访问 tuple 的某个元素。

>>> from collections import namedtuple
>>> Point = namedtuple('Point',['x','y'])
>>> p = Point(1,2)
>>> print(p.x,p.y)
1 2
>>> Web = namedtuple('web',['name','type','url'])
>>> p1 = Web('google','search','www.google.com')
>>> p2 = Web('sina','portal','www.sina.com.cn')
>>> print(p1)
Web(name='google',type='search',url='www.google.com')

deque

使用 list 存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为 list 是线性存储,数据量大的时候,插入和删除效率很低。

deque 是为了实现高效插入和删除操作的双向列表,适合用于队列和栈。

deque 在插入数据时速度比 list 快很多,当然这个是相对于存在大量数据的 list 而言的。

>>> from collections import deque
>>> import time
>>> q = deque(['a','b','c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> print(q)
deque(['y','a','b','c','x'])

对比一下 deque 和 list 的速度。对含有 1 亿个元素的 list 执行插入:

>>> q0 = [x*x for x in range(100000000)]
>>> a = time.time()
>>> q0.insert(0,888)
>>> b = time.time()
>>> print(b-a)
0.09701275825500488

对含有 1 亿个元素的 deque 执行插入:

>>> q1 = deque(q0)
>>> a = time.time()
>>> q1.appendleft(888)
>>> b = time.time()
>>> print(b-a)
0.0009984970092773438

defaultdict

在使用原生的 dict 的时候,如果用 d[key] 这样的方式访问,当指定的 key 不存在时,会抛出 KeyError 异常,也就是发生错误。

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

>>> from collections import defaultdict
>>> i = defaultdict(lambda:100)
>>> i['name']='David'
>>> print(i['name'])
David
>>> print(i['score'])
100

OrderedDict

原生的 dict 的 key 是无序的。而使用 OrderedDict,追加一对 key value。OrderedDict 的 key 会按照插入的顺序排列。

其他的方法基本一致。

Counter

Counter 提供了一个简单的计数器功能。

>>> from collections import Counter
>>> s = input('Please input:')
Please input:abcddeee
>>> s = s.lower()
>>> c = Counter(s)
>>> print(c.most_common(5)) # 获取出现频率最高的5个字符
[('e',3),('d',2),('b',1),('c',1),('a',1)]

Python 的 Collection 库的更多相关文章

  1. Python底层socket库

    Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...

  2. 【C++实现python字符串函数库】strip、lstrip、rstrip方法

    [C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...

  3. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  4. 【C++实现python字符串函数库】一:分割函数:split、rsplit

    [C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...

  5. python使用cookielib库示例分享

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持,下面是使用示例 该模块主要功能是提供可存储cookie的对象.使用此模块捕获 ...

  6. Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED

    Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...

  7. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  8. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

  9. python的urllib2库详细使用说明

    一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...

随机推荐

  1. django笔记一

    课程介绍 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封 ...

  2. [HDU 3521] [最小割] Being a Hero

    题意: 在一个有向图中,有n个点,m条边$n \le 1000 \And \And  m \le 100000$ 每条边有一个破坏的花费,有些点可以被选择并获得对应的金币. 假设一个可以选的点是$x$ ...

  3. Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E.Trips

    比赛的时候想到怎么做了 没调出来(感觉自己是个睿智) 给你N个点M条边,这M条边是一条一条加进去的 要求你求出加入每一条边时图中极大'K度'子图的大小 极大'K度'子图的意思是 要求出一个有尽量多的点 ...

  4. tarjan算法比较详细的讲解&&tarjan常见疑难解答&&洛谷P2002 消息扩散题解

    因为有大佬写的比我更长更具体,所以我也就写写总结一下了 引入: 众所周知,很多图中有个东西名叫环. 对于这个东西很多算法都很头疼.(suchas 迪杰斯特拉) 更深层:环属于强联通分量(strongl ...

  5. 洛谷-P3389-高斯消元模板

    链接: https://www.luogu.org/problem/P3389 题意: 给定一个线性方程组,对其求解 思路: 高斯消元,从第一项消到最后一项,消成一个上三角矩阵.再从最后一项依次向上回 ...

  6. 解决c#distinct不好用的问题

    当一个结合中想根据某一个字段做去重方法时使用以下代码 IQueryable 继承自IEnumerable 先举例: #region linq to object List<People> ...

  7. Session中的方法

    Session 管理一个数据库的任务单元,即管理数据库中的增删改查操作,提交事务. 方法CRUD:save(),delete(),load(),get(),update(),saveOrUpdate( ...

  8. Springboot设置session超时时间

    按优先级高到低说: 第一种: spring boot 启动类里面: package com.mycenter; import org.mybatis.spring.annotation.MapperS ...

  9. cogs157. [USACO Nov07] 奶牛跨栏 x

    157. [USACO Nov07] 奶牛跨栏 ★★   输入文件:hurdles.in   输出文件:hurdles.out   简单对比时间限制:1 s   内存限制:128 MB 译 by Cm ...

  10. HDU 5249:KPI(权值线段树)

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...