collections模块下的几个类
来源:互联网 发布:linux怎么创建用户密码 编辑:程序博客网 时间:2024/05/17 07:07
namedtuple
namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。
这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。
如果要用坐标和半径表示一个圆,也可以用namedtuple定义:
# namedtuple('名称', [属性list]):Circle = namedtuple('Circle', ['x', 'y', 'r'])
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
#q=deque(list)q=deque(['a','b','c'])
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
defaultdict
使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
>>> from collections import defaultdict>>> dd = defaultdict(lambda: 'N/A')>>> dd['key1'] = 'abc'>>> dd['key1'] # key1存在'abc'>>> dd['key2'] # key2不存在,返回默认值'N/A'
注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。
OrderedDict
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict:
>>> from collections import OrderedDict>>> d = dict([('a', 1), ('b', 2), ('c', 3)])>>> d # dict的Key是无序的{'a': 1, 'c': 3, 'b': 2}>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])>>> od # OrderedDict的Key是有序的OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict的Key会按照插入的顺序排列,不是Key本身排序。
OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key。
Counter
Counter是一个简单的计数器.
>>> from collections import Counter>>> c = Counter()>>> for ch in 'programming':... c[ch] = c[ch] + 1...>>> cCounter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
Counter实际上也是dict的一个子类.
- collections模块下的几个类
- collections模块的Counter类
- Python collections模块的Counter类
- python的collections模块
- Python:collections模块的用法
- collections模块里的:namedtuple
- Python的collections模块小结
- Collections工具类下的sort方法
- Python标准库——collections模块的Counter类
- Python标准库——collections模块的Counter类
- Python标准库——collections模块的Counter类
- Python标准库——collections模块的Counter类
- Python标准库——collections模块的Counter类
- Python标准库——collections模块的Counter类
- 关于 Java Collections 的几个常见问题
- 有关Java Collections的几个常见问题
- 关于Java Collections的几个常见问题
- LINUX下可加载模块的几个工具
- 前百度移动框架总工程师分享iOS开发
- CSS3的REM设置字体大小
- iOS 与 JS 交互开发知识总结
- Android 自定义带动画的dialog
- Octave中find函数用法
- collections模块下的几个类
- Apache 设置支持伪静态
- Qml倒影
- 纯js实现复制粘贴
- 关于编程的一些好的文章
- 程序员如何用技术变现(上)
- Spring MVC框架
- java内存模型
- 为什么我们需要 集合(set)?