python常用数据结构(2)

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教程

posted @ 2017-03-13 10:13  Mars.wang  阅读(292)  评论(0)    收藏  举报