Python collections的使用
collections是Python内建的一个集合模块,提供了许多有用的集合类。
本文将介绍以下几种方法:
namedtuple
Counter()
deque
OrderedDict
一、namedtuple
namedtuple
是一个函数,它用来创建一个自定义的tuple
对象,并且规定了tuple
元素的个数,可以用属性而不是索引来引用tuple
的某个元素。
因为tuple是不可变类型,所以用namedtuple定义出来的对象经过初始化以后,对象的属性是不可以改变的。
>>> from collections import namedtuple
>>> Stu = namedtuple("Student",["name","age","score"])
>>> s = Stu("张三",17,450)
>>> s
Student(name='张三', age=17, score=450)
>>> s.name
'张三'
>>> s.score
450
>>> s.age
17
>>> s.age=30
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
s.age=30
AttributeError: can't set attribute
>>>
验证对象s是Stu的对象,也是tuple的一种子类
>>> isinstance(s,Stu)
True
>>> isinstance(s,tuple)
True
同样的,如果要表示一个四边形的宽高:
>>> TR = namedtuple("TR",["width","height"])
>>> t = TR(10,20)
>>> t
TR(width=10, height=20)
>>> t.width
10
>>> t.height
20
二、Counter()
Counter是一个简单的计数器,用来统计一个字符串中每个字符出现的次数。
>>> from collections import Counter
>>> c = Counter()
>>> c
Counter()
>>> for x in "whoami I am you":
c[x] += 1
>>> c
Counter({' ': 3, 'o': 2, 'a': 2, 'm': 2, 'w': 1, 'h': 1, 'i': 1, 'I': 1, 'y': 1, 'u': 1})
>>> for x in c:
print(x,c[x])
w 1
h 1
o 2
a 2
m 2
i 1
3
I 1
y 1
u 1
用c.key排序再删除:
>>> for x in sorted(c.keys()):
print(x,c[x])
3
I 1
a 2
h 1
i 1
m 2
o 2
u 1
w 1
y 1
三、deque
使用list
存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list
是线性存储,数据量大的时候,插入和删除效率很低。
deque是高效实现插入和删除操作的双向list,适合用于栈和队列
>>> from collections import deque
>>> l = [1,4,9,-10]
>>> q = deque(l)
>>> q
deque([1, 4, 9, -10])
>>> q.append(100)
>>> q.pop()
100
>>> q.appendleft(0)
>>> q
deque([0, 1, 4, 9, -10])
>>> q.popleft()
0
>>> q
deque([1, 4, 9, -10])
除了实现list的append()
和pop()
外,还支持appendleft()
和popleft(),
可以非常高效地往头部添加或删除元素。
四、OrderedDict
使用dict
时,Key是无序的。如果要保持Key的插入顺序,可以用OrderedDict,
OrderedDict
的Key会按照插入的顺序返回,不是Key本身排序。
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> list(od.keys()) # 按照插入的Key的顺序返回
['z', 'y', 'x']
Python collections的使用的更多相关文章
- python collections defaultdict
class_counts = defaultdict(int) 一.关于defaultdict 在Python里面有一个模块collections,解释是数据类型容器模块.这里面有一个collect ...
- Python collections模块总结
Python collections模块总结 除了我们使用的那些基础的数据结构,还有包括其它的一些模块提供的数据结构,有时甚至比基础的数据结构还要好用. collections ChainMap 这是 ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- Python Collections详解
Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...
- python collections模块
collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function f ...
- Python collections 模块用法举例
Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...
- Python collections.defaultdict 笔记
其实defaultdict 就是一个字典,只不过python自动的为它的键赋了一个初始值.这也就是说,你不显示的为字典的键赋初值python不会报错,看下实际例子. 比如你想计算频率 frequenc ...
- Python collections.defaultdict() 与 dict的使用和区别
看样子这个文档是难以看懂了.直接看示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import collections s = [('yellow', ...
- Python collections.OrderedDict解决dict元素顺序问题
编程中遇到个问题,python json.loads时元素顺序可能会发生变化. 这个对于一些需要使用元素顺序来做一些策略的代码来说是致命的. 在网上查了查,结合自己的知识总结一下. 使用dict时,K ...
- Python: collections.nametuple()--映射名称到序列元素
问题: 通过下标访问列表或者元组中元素 answer: collections.namedtuple()通过使用元组对象来解决这个问题 这个函数实际上是一个返回Python中标准元组类型子类的一个工 ...
随机推荐
- linux bash算术运算
+, -, *(乘), /(除), **(乘方), %(取模) let var=算术运算符表达式 var=$[算术运算符表达式] var=$((算术运算符表达式)) var=$(expr $ARG1 ...
- OpenLayers测量距离和面积
<!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equ ...
- java使用正则表达式,去除windows系统中文件名的非法路径
w哦我爬取一个页面,并且把附件下载下来,保存,有的时候文件名,带*号,所以,无法保存 这时候就要删除所有的非法字符 String fileName = resourceName + fileTypt; ...
- 解决github下载慢的终极方法
直接用ssr代理,使用全局代理. 下载墙外的软件,都可以,比如 GithubDsktop
- Orleans 整体介绍
背景 Orleans 是微软开源的Actor模型开发框架. Actor模型 此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人 ...
- PHP快速导出Excel文件 (采用xlsx Writer)
<?php include_once("xlsxwriter.class.php"); ini_set('display_errors', 0); ini_set('log_ ...
- 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用
在消息队列中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺.如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性.但其实可能后面几 ...
- day1---转自金角大王
金角大王等待唐僧的日子 Yesterday, when I was young, There were so many songs that waited to be sung. 博客园 首页 新随笔 ...
- 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群
目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...
- JS 里的数据类型转换
JS的数据类型转换 一.js中的数据类型Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 1.Number Number数据类型指 ...