@@ -929,9 +929,7 @@ which incur interpreter overhead.
929
929
def sliding_window(iterable, n):
930
930
# sliding_window('ABCDEFG', 4) --> ABCD BCDE CDEF DEFG
931
931
it = iter(iterable)
932
- window = collections.deque(islice(it, n), maxlen=n)
933
- if len(window) == n:
934
- yield tuple(window)
932
+ window = collections.deque(islice(it, n-1), maxlen=n)
935
933
for x in it:
936
934
window.append(x)
937
935
yield tuple(window)
@@ -1420,8 +1418,34 @@ The following recipes have a more mathematical flavor:
1420
1418
>>> list (grouper(' abcdefg' , n = 3 , incomplete = ' ignore' ))
1421
1419
[('a', 'b', 'c'), ('d', 'e', 'f')]
1422
1420
1421
+ >>> list (sliding_window(' ABCDEFG' , 1 ))
1422
+ [('A',), ('B',), ('C',), ('D',), ('E',), ('F',), ('G',)]
1423
+ >>> list (sliding_window(' ABCDEFG' , 2 ))
1424
+ [('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'F'), ('F', 'G')]
1425
+ >>> list (sliding_window(' ABCDEFG' , 3 ))
1426
+ [('A', 'B', 'C'), ('B', 'C', 'D'), ('C', 'D', 'E'), ('D', 'E', 'F'), ('E', 'F', 'G')]
1423
1427
>>> list (sliding_window(' ABCDEFG' , 4 ))
1424
1428
[('A', 'B', 'C', 'D'), ('B', 'C', 'D', 'E'), ('C', 'D', 'E', 'F'), ('D', 'E', 'F', 'G')]
1429
+ >>> list (sliding_window(' ABCDEFG' , 5 ))
1430
+ [('A', 'B', 'C', 'D', 'E'), ('B', 'C', 'D', 'E', 'F'), ('C', 'D', 'E', 'F', 'G')]
1431
+ >>> list (sliding_window(' ABCDEFG' , 6 ))
1432
+ [('A', 'B', 'C', 'D', 'E', 'F'), ('B', 'C', 'D', 'E', 'F', 'G')]
1433
+ >>> list (sliding_window(' ABCDEFG' , 7 ))
1434
+ [('A', 'B', 'C', 'D', 'E', 'F', 'G')]
1435
+ >>> list (sliding_window(' ABCDEFG' , 8 ))
1436
+ []
1437
+ >>> try :
1438
+ ... list (sliding_window(' ABCDEFG' , - 1 ))
1439
+ ... except ValueError :
1440
+ ... ' zero or negative n not supported'
1441
+ ...
1442
+ 'zero or negative n not supported'
1443
+ >>> try :
1444
+ ... list (sliding_window(' ABCDEFG' , 0 ))
1445
+ ... except ValueError :
1446
+ ... ' zero or negative n not supported'
1447
+ ...
1448
+ 'zero or negative n not supported'
1425
1449
1426
1450
>>> list (roundrobin(' abc' , ' d' , ' ef' ))
1427
1451
['a', 'd', 'e', 'b', 'f', 'c']
0 commit comments