I have a string with digits like so – digit = "7316717"
Now I want to split the string in such a way that the output is a moving window of 3 digits at a time. So I get –
["731", "316", "167", "671", "717"]
How would the approach be? Straightforward way is to put in for-loop and iterate. But I feel some inbuilt python string function can do this in less code. Know of any such approach?
Advertisement
Answer
The itertools examples provides the window
function that does just that:
from itertools import islice def window(seq, n=2): "Returns a sliding window (of width n) over data from the iterable" " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... " it = iter(seq) result = tuple(islice(it, n)) if len(result) == n: yield result for elem in it: result = result[1:] + (elem,) yield result
Example usage:
>>> ["".join(x) for x in window("7316717", 3)] ['731', '316', '167', '671', '717']