1.有名字的元组——namedtuple
>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> p = Point(1, 2) >>> p.x 1 >>> p.y 2
Circle = namedtuple('Circle', ['x', 'y', 'r'])
2.双向链表——deque
list访问数据很快,但增删就比较慢,因为list是线性存储,deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈
>>> from collections import deque >>> q = deque(['a', 'b', 'c']) >>> q.append('x') >>> q.appendleft('y') >>> q deque(['y', 'a', 'b', 'c', 'x'])
deque
除了实现list的append()
和pop()
外,还支持appendleft()
和popleft()
,这样就可以非常高效地往头部添加或删除元素。
3.有序的字典——OrderedDict
>>> od = OrderedDict() >>> od['z'] = 1 >>> od['y'] = 2 >>> od['x'] = 3 >>> od.keys() # 按照插入的Key的顺序返回 ['z', 'y', 'x']
4.频数计算器——Counter
有时候经常要统计某个字符在字符串中出现的频率,或者某个数字在list中出现的频率,这个时候如果不想用pandas,Counter就能派上用场了。
>>> from collections import Counter >>> c = Counter() >>> for ch in 'programming': ... c[ch] = c[ch] + 1 ... >>> c Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
>>> a=[1,2,2,2,3,3,4] >>> from collections import Counter >>> c=Counter() >>> for item in a: ... c[str(item)]=c[str(item)]+1 ... >>> c Counter({'2': 3, '3': 2, '1': 1, '4': 1})
本文转自廖雪峰老师的python教程