• [^] # Re: On dirait du C

    Posté par . En réponse au journal Analyse de texte. Évalué à 4. Dernière modification le 15 décembre 2015 à 21:05.

    Piqué sur http://stackoverflow.com/questions/6822725/rolling-or-sliding-window-iterator-in-python

    from itertools import islice
    line="abcd\nefg"
    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
    for chunk in window(line, 2):
     print(chunk, ''.join(chunk))
    for chunk in window(line, 3):
     print(chunk, ''.join(chunk))
     from itertools import islice
    

    La sortie :

    ('a', 'b') ab
    ('b', 'c') bc
    ('c', 'd') cd
    ('d', '\n') d
    ('\n', 'e') 
    e
    ('e', 'f') ef
    ('f', 'g') fg
    ('a', 'b', 'c') abc
    ('b', 'c', 'd') bcd
    ('c', 'd', '\n') cd
    ('d', '\n', 'e') d
    e
    ('\n', 'e', 'f') 
    ef
    ('e', 'f', 'g') efg