Python Cookbook笔记
1.数据结构和算法
1.1分解序列
单独变量和序列元素个数相同
x, y = (1, 2)
1.2分解出N个元素
x, *y, z = [1, 2, 4, 5, 8]
1.3保存N项纪录
from colllections import deque
def search(lines, pattern, history=5):
previous_line = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_line
previous_line.append(line)
1.4找到最大或最小的N个元素
import heapq
nums = [1, 3, 4, -2, 4, 8, 9, 12, -2, 32]
#可接受key进行选择标准
ns = heapq.nsmallest(3, nums, key=None)
nl = heapq.nlargest(3, nums, key=None)
import heapq
nums = [1, 23, -3, 93, 32, -2, 93,4, 9, 4]
heap = list(nums)
heapq.heapify(heap)
heap.heappop()
heap.heappop()
1.5优先级队列
import heapq
class PriorityQueue():
def __init__(self):
self._queue = []
self._index = 0
def push(self, priority, item):
#此处放进队列的是一个元组
heapq.heappush(self._queue, (-priority, self._index, item))
self._index += 1
def pop(self):
#此处取的是item
heapq.heappop(self._queue)[-1]
1.6一建多值字典
一个键对应着一个元素容器
from collections import defaultdict
d = defaultdict(set)
#d = defaultdict(list)
d['a'].add(1)
d['a].add(2)
d['b'].add(3)
1.7有序字典
字典序列化或迭代时保持有序
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
for key in d:
print(key, d[key])
import json
print(json.dumps(d))