- Python在一些内置的数据类型,比如str, int, list, tuple, dict等,之后又提供了比较高级的额外的数据类型, 共有以下几种:Counter, deque, defaultdict, namedtuple, OrderedDict
那么接下来一个个的攻克它们。
一.namedtuple
namedtuple的函数原型如下:
1 | def namedtuple(typename, field_names, verbose=False, rename=False): |
- 作用就是通过将可迭代对象设置字段名,可使用名称来访问元素的数据对象。
比较重要参数释义:- typename: 自定义名,字符串类型
- field_names: 字段名,list类型
如下例子:
1 | `>>> Point = namedtuple('Point', ['x', 'y']) |
再举一个:
1 | from collections import namedtuple |
二.deque
deque其实是 double-ended queue 的缩写,翻译过来就是双端队列,它最大的好处就是实现了从队列 头部快速增加和取出对象: popleft(),appendleft()
该类的原型如下:
1
deque([iterable[, maxlen]]) --> deque object
该类有以下方法:
append: 添加元素到右侧的双端队列
appendleft: 添加元素到左侧的双端队列
clear: 移除所有元素
count: D.count(value) -> integer, 返回出现的值数
extend: 通过可迭代元素扩展右侧的双端队列
extendleft: 与上相反
pop: 删除并返回最右边的元素虽然原生的list也可以从头部添加和取出对象等方法:
1
2lis.insert(0, v)
lis.pop(0)但是与list不同的是list对象的这两种用法的时间复杂度是 O(n) ,也就是说随着元素数量的增加耗时呈线性上升。而使用deque对象则是 O(1) 的复杂度,所以当你的代码有这样的需求的时候, 一定要记得使用deque。
我们可以创建一个空的deque对象:
1
2d = deque()
# deque([])
然后进行操作:
1 | d.append(1) |
下面例子实现一个跑马灯效果:
1 | import sys |
三.Counter
实现计数功能
1 | `>>> c = Counter('abcdeabcdabcaba') # count elements from a string |
四.OrderedDict
OrderedDict相对于dict来说也就是有序字典。用法与dict类似,它有如下常用方法:
- clear
1
od.clear() -> None. Remove all items from od
如下例子:
1 | from collections import OrderedDict |
五.defaultdict
Python原生的数据结构dict的时候,如果用 `d[key]
这样的方式访问, 当指定的key不存在时,是会抛出KeyError异常的。如果使用defaultdict,只要你传入一个默认的工厂方法,那么请求一个不存在的key时, 便会调用这个工厂方法使用其结果来作为这个key的默认值。
1 | members = [ |
defaultdict(list)的用法和dict.setdefault(key, [])比较类似,上述代码使用setdefault实现如下:
1 | result = {} |