我碰到了StackOverflow中的一段代碼,它提出了關於deque
工作方式的兩個問題。我沒有足夠的聲譽問「原位」,因此這個問題:python deque瞭解
from collections import deque
from itertools import islice
def sliding_window(iterable, size=2, step=1, fillvalue=None):
if size < 0 or step < 1:
raise ValueError
it = iter(iterable)
q = deque(islice(it, size), maxlen=size)
if not q:
return # empty iterable or size == 0
q.extend(fillvalue for _ in range(size - len(q))) # pad to size
while True:
yield iter(q) # iter() to avoid accidental outside modifications
q.append(next(it))
q.extend(next(it, fillvalue) for _ in range(step - 1))
的代碼計算給定大小的滑動窗口上的序列。 我不明白的步驟是第一:
q = deque(islice(it, size), maxlen=size)
什麼用的maxlen
這裏?是不是islice
總是會輸出一個長度至多爲size
的迭代器?
其次:
yield iter(q) # iter() to avoid accidental outside modifications
爲什麼我們需要轉變到以可迭代,以避免「意外之外的修改」?
這很有用,非常感謝! – emanjavacas