2015-11-08 34 views
0

我正在寻找一些很好的pythonic方法来做到这一点。我遇到了this answer,我喜欢。它基于deque,就像我找到的大多数其他答案一样。我的问题是如果你想要窗口的内容超过已经包含在一个迭代中,我们需要做deque?什么是是在一些简单得多(背靠背for)这样的benfits:Python - 滑动窗口可变长度 - 使用Deque的好处

s = 'abcd' 

start = 0 
end = len(s) 

for i in range(end): 
    print(s[start:i+1]) 


for i in range(1,end): 
    print('{: >4s}'.format(s[i:end + 1])) 

花式打印输出:

a 
ab 
abc 
abcd 
bcd 
    cd 
    d 

回答

0

事实上,如果您的所有数据已经​​在内存中,然后简单地跟踪你的窗口的开始和结束就足够了。但是,情况并非总是如此 - 例如,在信号处理中,您通常会接收需要处理的数据流,然后写入磁盘或流到其他组件。在这种情况下,您将需要使用某种形式的队列而不是列表,因为从长列表的前面删除元素非常昂贵。