Я натолкнулся на код в StackOverflow, который поднял два вопроса о том, как работает deque
. Я не хватает репутации, чтобы спросить «на месте», поэтому этот вопрос:python deque understanding
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