Hello, i'm looking for this behaviour and i write a piece of code which works, but it looks odd to me. can someone help me to refactor it ?
i would like to walk across a list of items by series of N (N=3 below) of these. i had explicit mark of end of a sequence (here it is '.') which may be any length and is composed of words. for: s = "this . is a . test to . check if it . works . well . it looks . like ." the output should be (if grouping by 3) like: => this . => this . is a . => this . is a . test to . => is a . test to . check if it . => test to . check if it . works . => check if it . works . well . => works . well . it looks . => well . it looks . like . my piece of code : import sys class MyBuffer: def __init__(self): self.acc = [] self.sentries = [0, ] def append(self, item): self.acc.append(item) def addSentry(self): self.sentries.append(len(self.acc)) print >> sys.stderr, "\t", self.sentries def checkSentry(self, size, keepFirst): n = len(self.sentries) - 1 if keepFirst and n < size: return self.acc if n % size == 0: result = self.acc first = self.sentries[1] self.acc = self.acc[first:] self.sentries = [x - first for x in self.sentries] self.sentries.pop(0) return result s = "this . is a . test to . check if it . works . well . it looks . like ." l = s.split() print l mb = MyBuffer() n = 0 for x in l: mb.append(x) if x == '.': # end of something print "+", n n += 1 mb.addSentry() current = mb.checkSentry(3, True) # GROUPING BY 3 if current: print "=>", current -- http://mail.python.org/mailman/listinfo/python-list