collections库

  • namedtuple: 生成可以使用名字来访问元素内容的tuple子类
  • deque: 双端队列,可以快速的从另外一侧追加和推出对象
  • Counter: 计数器,主要用来计数(速度快)
  • OrderedDict: 有序字典
  • defaultdict: 带有默认值的字典

namedtuple

'''
我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。
'''
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)   #1
print(p.y)   #2
>>> isinstance(p, Point)
True
>>> isinstance(p, tuple)
True

类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:
# namedtuple('名称', [属性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])

deque

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque
q = deque([1, 2, 3])
q.append(4)
print(q)   #deque([1, 2, 3, 4])

q.appendleft(5)
print(q)   #deque([5, 1, 2, 3, 4])

print(q.pop())   #4

print(q.popleft())   #5

q.extend(['a'])
print(q)    #deque([1, 2, 3, 'a'])

q.extendleft(['b'])
print(q)    #deque(['b', 1, 2, 3, 'a'])

Counter

from collections import Counter
a=[1,1,2,2,3,4,5,6,7,7,8,8,8,9,9,9,9]
b=dict(Counter(a))
# b=dict(Counter(a).most_common(5))返回频率的前5个
print(b)
'''
key:元素
value:次数
{1: 2, 2: 2, 3: 1, 4: 1, 5: 1, 6: 1, 7: 2, 8: 3, 9: 4}
'''

OrderedDict

from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d) # dict的Key是无序的

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的,按照插入的顺序排序

defaultdict(与dict.get(key, default=None)没区别,就不写了)

 

猜你喜欢

转载自blog.csdn.net/rookie_is_me/article/details/85247826