# 将序列最后几项作为历史记录-deque

代码：

```python
from collections import deque
def search(lines,pattern,history=5):
    previous_lines=deque(maxlen=history)#设置队列，最大长度
    for line in lines:
        if pattern in line:#只有匹配pattern时才yield返回，及其前面的历史记录
            yield line,previous_lines
        previous_lines.append(line) #记录所有历史记录，最大maxlen=history

lines=['AA',
       'abbaAA',
       'ee',
       'ad',
       'a1AAsss',
       'skas',
       '1233',
       'salddsd',
       'sdsfw2q',
       'ddAAdd',
       '1AA1',
       'sAAss']

for line,previous_lines in search(lines,'AA',history=3):
    for pline in previous_lines:
        print(pline,end=',')

    print('<前面是',line)
    print('-'*20)
```

结果：

```python
<前面是 AA
--------------------
AA,<前面是 abbaAA
--------------------
abbaAA,ee,ad,<前面是 a1AAsss
--------------------
1233,salddd,sdsfw2q,<前面是 ddAAdd
--------------------
salddd,sdsfw2q,ddAAdd,<前面是 1AA1
--------------------
sdsfw2q,ddAAdd,1AA1,<前面是 sAAss
--------------------
```

视频：

```
wait
```

附 deque双向队列数据结构的使用

代码：

```python
from collections import deque
'''
deque是双向队列，底层用双链表实现
'''
print('创建，初始空，a=deque(maxlen=3)')
a=deque(maxlen=3)
print(a)
print()

print('创建，最大len=3，a=deque([1,2,3,4,5,6], maxlen=3)')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
print()


print('删除一个，最新来排队的那个，a.pop()')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
a.pop()
print(a)
print()

print('删除一个，最早来排队的那个，a.popleft()')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
a.popleft()
print(a)
print()


print('查找第一个匹配到5的位置，a.index(5)')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
print(a.index(5))
print()


print('反过来排队，a.reverse()')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
a.reverse()
print(a)
print()


print('append添加一个，最新8进去，排队。a.append(8)')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
a.append(8)
print(a)
print()

print('extend添加一列，最新[8,88]进去，排队。a.extend([8,88])')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
a.extend([8,88])
print(a)
print()


print('appendleft添加一个，最新8进去，插队到最前面。a.appendleft(8)')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
a.appendleft(8)
print(a)
print()

print('extendleft添加一列，最新[8,88]进去，插队到最前面。a.extendleft([8,88])')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print(a)
a.extendleft([8,88])
print(a)
print()

print('深拷贝。b=a.copy()')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print('a',a)
b=a.copy()
b.append(999)
print('a',a)
print('b',b)
print()


print('浅拷贝。b=a')
a=deque([1,2,3,4,5,6], maxlen=3)# 创建：
print('a',a)
b=a
b.append(999)
print('a',a)
print('b',b)
print()
```

结果：

```python
创建，初始空，a=deque(maxlen=3)
deque([], maxlen=3)

创建，最大len=3，a=deque([1,2,3,4,5,6], maxlen=3)
deque([4, 5, 6], maxlen=3)

删除一个，最新来排队的那个，a.pop()
deque([4, 5], maxlen=3)

删除一个，最早来排队的那个，a.popleft()
deque([5, 6], maxlen=3)

查找第一个匹配到5的位置，a.index(5)
deque([4, 5, 6], maxlen=3)
1

反过来排队，a.reverse()
deque([4, 5, 6], maxlen=3)
deque([6, 5, 4], maxlen=3)

append添加一个，最新8进去，排队。a.append(8)
deque([4, 5, 6], maxlen=3)
deque([5, 6, 8], maxlen=3)

extend添加一列，最新[8,88]进去，排队。a.extend([8,88])
deque([4, 5, 6], maxlen=3)
deque([6, 8, 88], maxlen=3)

appendleft添加一个，最新8进去，插队到最前面。a.appendleft(8)
deque([4, 5, 6], maxlen=3)
deque([8, 4, 5], maxlen=3)

extendleft添加一列，最新[8,88]进去，插队到最前面。a.extendleft([8,88])
deque([4, 5, 6], maxlen=3)
deque([88, 8, 4], maxlen=3)

深拷贝。b=a.copy()
a deque([4, 5, 6], maxlen=3)
a deque([4, 5, 6], maxlen=3)
b deque([5, 6, 999], maxlen=3)

浅拷贝。b=a
a deque([4, 5, 6], maxlen=3)
a deque([5, 6, 999], maxlen=3)
b deque([5, 6, 999], maxlen=3)
```

视频：

```
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://im-qianuxn.gitbook.io/pytorch/ji-suan-ji/python/2.2-shi-yong-yuan-zu/2.2.6-jiang-xu-lie-zui-hou-ji-xiang-zuo-wei-li-shi-ji-lu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
