Find all consecutive sub-sequences of length n in a sequence

前端 未结 4 1276
野的像风
野的像风 2020-12-10 18:03

I want to find all consecutive sub-sequences of length n in a sequence.

E.g. say n was 3 and the sequence was:

[0,1,7,3,4,5,10]

I w

相关标签:
4条回答
  • 2020-12-10 18:42
    >>> x = [0,1,7,3,4,5,10]
    >>> [x[n:n+3] for n in range(len(x)-2)]
    [[0, 1, 7], [1, 7, 3], [7, 3, 4], [3, 4, 5], [4, 5, 10]]
    
    0 讨论(0)
  • 2020-12-10 18:43

    The following might probably be suit for you:

    def subseqs(xs, n):
      all_seqs = (xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs))
      return filter(lambda seq: len(seq) == n, all_seqs)
    
    >>> xs = [1, 2, 3, 4, 5, 6] # can be also range(1, 7) or list(range(1, 7)) 
    >>> list(subseqs(xs, 3))
    [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]
    

    Or simply, for getting all of the sequences of a list named 'xs':

    [xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs)]
    

    For getting the sequences of a list named 'xs' that are only from length n:

    [xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs) if len(xs[i:j+1]) == n]
    
    0 讨论(0)
  • 2020-12-10 18:46
    def subseqs(seq, length):
        for i in xrange(len(seq) - length + 1):
            yield seq[i:i+length]
    

    Use it ike this:

    >>> for each in subseqs("hello", 3):
    ...     print each
    ...
    hel
    ell
    llo
    

    Of course it works also with lists:

    >>> list(subseqs([1, 2, 3, 4, 5, 6, 7, 8], 3))
    [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8]]
    
    0 讨论(0)
  • 2020-12-10 19:02
    >>> x = [0,1,7,3,4,5,10]
    >>> n = 3
    >>> zip(*(x[i:] for i in range(n)))
    [(0, 1, 7), (1, 7, 3), (7, 3, 4), (3, 4, 5), (4, 5, 10)]
    

    If you want the result to be a list of lists instead of list of tuples, use map(list, zip(...)).

    0 讨论(0)
提交回复
热议问题