擅长:python、mysql、java
<p><a href="https://stackoverflow.com/a/23823376/1142167">Tim's answer</a>和<a href="https://stackoverflow.com/a/23823711/1142167">Blckknght's answer</a>是好的。要添加到解决方案池,还可以使用deque:</p>
<pre><code>from collections import deque
n = 2
with open('myfile', 'r') as infile:
window = deque(maxlen=n)
for line in infile:
window.append(line)
do_something(*window)
</code></pre>
<p>更一般地,您可以创建一个生成器,从deque生成:</p>
<pre><code>def sliding_window(iterable, n=2, fill_value=None, add_padding=False):
it = iter(iterable)
if add_padding:
window = deque([fill_value for _ in range(n-1)], maxlen=n)
window.append(next(it))
else:
window = deque([next(iterable) for _ in range(n)], maxlen=n)
yield tuple(window)
for item in it:
window.append(it)
yield tuple(window)
if add_padding:
for _ in range(n-1):
window.append(fill_value)
yield tuple(window)
</code></pre>
<p>请注意,如果<code>iterable</code>中的值少于<code>n</code>,则上述实现将生成一个空生成器。你知道吗</p>