Python split string in moving window

后端 未结 4 2220
天涯浪人
天涯浪人 2020-12-03 11:39

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

相关标签:
4条回答
  • 2020-12-03 12:12
    digit = "7316717"
    digit_sets = [digit[i:i+3] for i in range(len(digit)-2)]
    
    0 讨论(0)
  • 2020-12-03 12:21

    There is a very good recipe pairwise in itertools docs.

    Modernizing it a bit for n elements in the group, I made this code:

    from itertools import tee, izip
    
    def window(iterable, n):
        els = tee(iterable, n)
        for i, el in enumerate(els):
            for _ in xrange(i):
                next(el, None)
        return izip(*els)
    
    
    print(["".join(i) for i in window("2316515618", 3)])
    

    Python 2.7

    0 讨论(0)
  • 2020-12-03 12:28
    >>> s = "7316717"
    >>> [s[i:i+3] for i in range(len(s)-2)]
    ['731', '316', '167', '671', '717']
    
    0 讨论(0)
  • 2020-12-03 12:31

    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']
    
    0 讨论(0)
提交回复
热议问题