Python 的 Collection 库
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 库的更多相关文章
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- 【C++实现python字符串函数库】strip、lstrip、rstrip方法
[C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- 【C++实现python字符串函数库】一:分割函数:split、rsplit
[C++实现python字符串函数库]split()与rsplit()方法 前言 本系列文章将介绍python提供的字符串函数,并尝试使用C++来实现这些函数.这些C++函数在这里做单独的分析,最后我 ...
- python使用cookielib库示例分享
Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持,下面是使用示例 该模块主要功能是提供可存储cookie的对象.使用此模块捕获 ...
- Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED
Python virtualenv安装库报错SSL: CERTIFICATE_VERIFY_FAILED 问题描述 使用pip按照virtualenv报错,如下: pip install virtua ...
- 【python】标准库的大致认识
正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...
- Python 图形 GUI 库 pyqtgraph
原文 Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...
- python的urllib2库详细使用说明
一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...
随机推荐
- oracle监听启动很慢
TNS-12531: TNS:cannot allocate memory 首先查看内存,free -m 发现当前的空闲内存还有很多,那就不是内存不足的问题 想到之前重启过数据库服务器,查看主机名ho ...
- Daily Affirmations 每天对自己大声说:我很棒
I was 18 the first time a therapist2) tried to get me to embrace the idea of daily affirmations. I w ...
- 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析
<编译原理>求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析 算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集. 表示及含义: FIRSTVT(T) 非 ...
- gson转换问题
list集合中integer问题 List<Integer> lists= gson.fromJson(params.get("lists"), new TypeTok ...
- 使用nfs制作动态分配存储卷
参考文献:https://yq.aliyun.com/articles/613036 相对于静态存储, 动态存储的优势: ● 管理员无需预先创建大量的PV作为存储资源; ● 静态存储需要用户申请PVC ...
- 【leetcode】740. Delete and Earn
题目如下: Given an array nums of integers, you can perform operations on the array. In each operation, y ...
- windows和linux开机自启动设置
Windows 1,启动快捷方式 开始>程序>启动 文件夹中拷贝进去需要开机启动的程序快捷方法,此方法需要相应用户登录系统2,注册为服务,设置启动方式为自动 a, sc命令 ...
- 需求-java web 能够实现整个文件夹的上传下载吗?
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- (转载)rabbitmq与springboot的安装与集成
原文地址:https://segmentfault.com/a/1190000016991529 一.前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列, ...
- HDU6579 Operation
题目链接 问题分析 区间求异或和最大,比较自然的想到了线性基.而每次求一个区间的线性基显然是行不通的.我们考虑在每个位置求出首位置到当前位置的线性基.同时我们要使线性基中高位的位置所选的数尽量靠后.这 ...