美文网首页Python
collections.deque -- 队列的使用

collections.deque -- 队列的使用

作者: cook__ | 来源:发表于2018-09-22 13:17 被阅读2次

    deque(maxlen=N)创建一个固定长度的队列。当有新纪录加入而队列已满时会自动移除最老的那条记录。

    from collections import deque
    q = deque(maxlen=3)
    q
    Out[9]: deque([])
    q.append(1)
    q.append(2)
    q.append(3)
    q
    Out[13]: deque([1, 2, 3])
    q.append(4)
    q
    Out[15]: deque([2, 3, 4])
    

    如果不指定队列的大小,也就得到了一个无界限的队列,可以在两端执行添加和删除操作。

    q = deque()
    q
    Out[17]: deque([])
    q.append(1)
    q.append(2)
    q.append(3)
    q
    Out[21]: deque([1, 2, 3])
    q.appendleft(4)
    q
    Out[23]: deque([4, 1, 2, 3])
    q.pop()
    Out[24]: 3
    q
    Out[25]: deque([4, 1, 2])
    q.popleft()
    Out[26]: 4
    q
    Out[27]: deque([1, 2])
    

    应用: --保留最后N个元素(保存有限的历史记录)
    当发现有匹配时就输出当前的匹配行以及最后检查过的N行文本:

    def search(lines, pattern, history=5):
        """ 文本匹配操作:当发现有匹配时就输出当前的匹配行及最后检查过的N行文本 """
        previous_lines = deque(maxlen=history)
        for line in lines:
            if pattern in line:
                # 将处理搜索过程的代码和使用搜索结果的代码解耦
                yield line, previous_lines  # 返回line,previous_lines
            previous_lines.append(line)
    
    with open('test.txt') as f:
        for line, prevlines in search(f, 'python', 5):  # for用来迭代生成器search
            for pline in prevlines:
                print(pline, end='')  # 将end='\n'替换
            print(line, end='')
            print('-'*20)
    

    相关文章

      网友评论

        本文标题:collections.deque -- 队列的使用

        本文链接:https://www.haomeiwen.com/subject/bbotoftx.html