Generate a list of strings with a sliding window using itertools, yield, and iter() in Python 2.7.1?

后端 未结 6 979
鱼传尺愫
鱼传尺愫 2020-12-18 03:21

I\'m trying to generate a sliding window function in Python. I figured out how to do it but not all inside the function. itertools, yield, and iter() are entirely new to me

相关标签:
6条回答
  • 2020-12-18 04:00
    def window(fseq,fn):
        alpha=[fseq[i:i+fn] for i in range(len(fseq)-(fn-1))]
        return alpha
    
    0 讨论(0)
  • 2020-12-18 04:02

    Use zip function in one line code:

      [ "".join(j) for j in zip(*[fseq[i:] for i in range(window_size)])]
    
    0 讨论(0)
  • 2020-12-18 04:06

    I don't know what your input or expected output are, but you cannot mix yield and return in one function. change return to yield and your function will not throw that error again.

    def window(fseq, window_size=5):
        ....
            final.append(tentative_string)
        yield final
    
    0 讨论(0)
  • 2020-12-18 04:18
    >>>def window(data, win_size):
    ...    tmp = [iter(data[i:]) for i in range(win_size)]
    ...    return zip(*tmp)
    >>> a = [1, 2, 3, 4, 5, 6]
    >>> window(a, 3)
    >>>[(1,2,3), (2,3,4), (3,4,5), (4,5,6)]
    
    0 讨论(0)
  • 2020-12-18 04:19

    You mean you want to do this ? :

    a='abcdefg'
    b = [a[i:i+3] for i in xrange(len(a)-2)]
    print b
    ['abc', 'bcd', 'cde', 'def', 'efg']
    
    0 讨论(0)
  • 2020-12-18 04:19

    Your generator could be much shorter:

    def window(fseq, window_size=5):
        for i in xrange(len(fseq) - window_size + 1):
            yield fseq[i:i+window_size]
    
    
    for seq in window('abcdefghij', 3):
        print seq
    
    
    abc
    bcd
    cde
    def
    efg
    fgh
    ghi
    hij
    
    0 讨论(0)
提交回复
热议问题