def search(lines, pattern, history=5):
    previous_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line, previous_lines
        previous_lines.append(line)
        if pattern in line:
            yield line, previous_lines
        previous_lines.append(line)


# 生成器函数将处理搜索过程的代码和使用搜索结果的代码解耦开
# deque创建一个固定长度的队列,新记录加入队列已满的时候会自动移除最老的记录
with open("filename.txt") as f:
    for line, prevlines in search(f, "python", 5):
        for pline in prevlines:
            # 默认是以换行符结尾的
            print(pline, end="")
        print(line, end="")
        print("-" * 20)
# deque的操作
q = deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
q.append(4)
print(q)
q.appendleft(5)
print(q)
print(q.pop())
print(q.popleft())

# 4.找到最大或者最小的n个元素
# 从一个集合中获得到最大或者最小的N个元素的列表
nums = [1, 8, 2, 23, 7, -3, 18, 23, 42, 37, 2]
# 使用max或者min函数获取最大或者最小值
print(max(nums), min(nums))