一、总述
众所周知,Python有基本的数据类型(字符型str,整型int,列表list,元组tuple,字典dict等)。
collections模块在以上数据类型的基础上引入了五种数据结构,更好地满足了编码需求。
1.namedtuple()
:生成可以用名字来访问元素内容的tuple子类
2.deque
:双端队列,可以快速从另一侧追加和推出对象
3.Counter
:计数器,主要用来计数
4.OrderedDict
:有序字典
5.defaultdict
:带有默认值的字典
1.namedtuple()
tuple是不可变的元组,为了增加代码的可读性,可以用**namedtuple()**创建自定义的tuple对象,这个对象是tuple 的子类。**namedtuple()**产生可以使用名称来访问元素的数据对象。
from collections import namedtuple
websites = [
('google','http://www.google.com/', u'张朝阳'),
('Sina', 'http://www.sina.com.cn/', u'王志东'),
('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website',['name','url','founder'])
for website in websites:
website = Website._make(website)
print(website)
# 结果
# Website(name='google', url='http://www.google.com/', founder='张朝阳')
# Website(name='Sina', url='http://www.sina.com.cn/', founder='王志东')
# Website(name='163', url='http://www.163.com/', founder='丁磊')
2.deque
deque
是double-ended queue(双端队列)
的缩写,它实现了从队头快速增加和取出对象:.popleft()
,.appendleft()
。
在Python中查找元素的时间复杂度为O(1),增删元素的时间复杂度为O(n)。
原生的list从队头增删元素:
ls.insert(0, v)
ls.pop(0)
deque
增删元素的时间复杂度为O(1)。
#例1
from collections import deque
q = deque([1,2,3,4,5])
#在队尾添加元素6
q.append(6)
print(q) #deque([1, 2, 3, 4, 5, 6])
#在队头添加元素0
q.appendleft(0)
print(q)