灵活的滑动窗口(Python实现)

3
问题描述:我想查看文本窗口中左侧和右侧3个单词的术语。基本情况为w-3 w-2 w-1术语w+1 w+2 w+3。我想实现一个滑动窗口,以记录每个术语的上下文单词。因此,每个单词一次被视为术语,但当窗口移动时,它变成上下文单词等。但是,当术语是行中的第一个单词时,左侧没有上下文单词(t w+1 w+2 w+3),当它是第二个单词时,只有一个上下文单词在左侧,依此类推。因此,我对于如何在Python中实现这个灵活的滑动窗口而不必写出并分别指定每种可能的情况感兴趣。 概括如下: 输入样例: ["w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10"] 输出样例: t1 w2 w3 w4
w1 t2 w3 w4 w5
w1 w2 t3 w4 w5 w6
w1 w2 w3 t4 w5 w6 w7
__ w2 w3 w4 t5 w6 w7 w8
__ __ 等等
我的当前计划是使用每行输出的单独条件来实现这一点。

我们必须向前走,而不是后退!向上,而不是向前!并且永远,永远旋转! - Li-aung Yip
1个回答

7
如果你想要一个长度为n的滑动窗口,可以使用最大长度为n的双端队列来实现缓冲区。下面这个例子应该能说明这个概念:
mystr = "StackOverflow"    
from collections import deque    
window = deque(maxlen=5)
for char in mystr:
    window.append(char)
    print ( ''.join(list(window)) )

输出:

S
St
Sta
Stac
Stack
tackO
ackOv
ckOve
kOver
Overf
verfl
erflo
rflow

1
请注意,maxlen arg 是在 Python 2.7 中引入的。 - jrennie
谢谢,Li-aung,这对我很有用。我现在正在使用deque从文件的开头和结尾记录术语的上下文。我需要的是deque的灵活性,以存储最大长度的元素,但可能也少一些。 - sim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接