summaryrefslogtreecommitdiffstats
path: root/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils.py')
-rw-r--r--utils.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/utils.py b/utils.py
new file mode 100644
index 0000000..d322ed0
--- /dev/null
+++ b/utils.py
@@ -0,0 +1,15 @@
+from collections import deque
+from collections.abc import Iterable, Iterator, Generator
+from itertools import islice
+from typing import TypeVar
+
+T = TypeVar('T')
+def sliding_window(iterable: Iterable[T], n: int) -> Generator[tuple[T, ...], None, None]:
+ # sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG
+ it: Iterator[T] = iter(iterable)
+ window: deque[T] = deque(islice(it, n), maxlen=n)
+ if len(window) == n:
+ yield tuple(window)
+ for x in it:
+ window.append(x)
+ yield tuple(window)