基本数据结构:堆,栈,队列,哈希表
Collections
deque: 双向列表 高效实现插入和删除,适用于堆列和栈
支持append, pop, append left, pop left
>>>
from
collections
import
deque
>>>
q = deque([
'a'
,
'b'
,
'c'
])
>>>
q.append(
'x'
)
>>>
q.appendleft(
'y'
)
>>>
q
deque([
'y'
,
'a'
,
'b'
,
'c'
,
'x’
])
defaultdict:避免key不存在报错的问题,提供工厂函数,为字典查询提供默认值
>>>
from
collections
import
defaultdict
>>>
dd = defaultdict(
lambda
:
'N/A'
)
>>>
dd[
'key1'
] =
'abc'
>>>
dd[
'key1'
]
# key1存在
'abc'
>>>
dd[
'key2'
]
# key2不存在,返回默认值
'N/A'
python3.6(包含)之后,所有的普通dict()字典都变为有序的了,不再需要OrderedDict()这个类了
OrderedDict:有序字典,按插入顺序排序,dict的key默认是无序的,可以实现FIFO的dict
from
collections
import
OrderedDict
class
LastUpdatedOrderedDict
(OrderedDict):
def
__init__
(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity
def
__setitem__
(self, key, value):
containsKey =
1
if
key
in
self
else
0
if
len(self) - containsKey >= self._capacity:
last = self.popitem(last=
False
)
print
'remove:'
, last
if
containsKey:
del
self[key]
print
'set:'
, (key, value)
else
:
print
'add:'
, (key, value)
OrderedDict.__setitem__(self, key, value)
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
})
堆
python heapq只有小顶堆,没有大顶堆,数据取反可以实现大顶堆
import
heapq
heapq 函 数 | 描 述 |
heappush(heap, x)
|
将x压入堆中
|
heappop(heap)
|
从堆中弹出最小的元素
|
heapreplace(heap, x)
|
替换元素
|
heapify(heap)
|
让列表具备堆特征
|
nlargest(n, iter)
|
返回iter中n个最大的元素
|
nsmallest(n, iter)
|
返回iter中n个最小的元素
|
优先队列
from
queue
import
PriorityQueue
初始化方法传入一个参数 maxsize,表示队列的最大容量
主要方法:
qsize
获得元素数量
get / put
方法加入或者弹出队列顶端的那个元素
get_nowait
/
put_nowait
忽略线程阻塞地加入或弹出(blocking)
empty
,
full
判断是否空(满),返回bool类型