On Fri, 21 Nov 2008 18:10:02 +0100 Gerard flanagan <[EMAIL PROTECTED]> wrote:
> data = ''' > 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 > 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 > 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 > 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 > 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1''' > > data = [int(x) for x in data.split()] > > from itertools import groupby But groupby needs sorted data? Suppose the rules do not conflict or overlap and between them divide all the values, then maybe this would work: class StateMachine: def __init__(self,*rules): self.rules = rules self.state = len(rules) #deliberately unreachable self.first = True def change(self,x): #check and/or change state for i,rule in enumerate(self.rules): if rule(x): if i == self.state: #no state change return False else: #maybe state change self.state = i if self.first: #set initial state, no change self.first = False return False else: return True #state is changed raise ValueError def test(): data = ''' 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 9 3 3 0 3 3 0 3 3 0 3 3 0 10 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1 6 6 1''' data = map(int, data.split()) def rule1(x): return x in set((0, 3, 9)) def rule2(x): return x in set((6, 1, 10)) state = StateMachine(rule1,rule2) L = [] res = [] for x in data: if state.change(x): res.append(list(L)) L =[] L.append(x) res.append(list(L)) print res if __name__=='__main__': test() -- http://mail.python.org/mailman/listinfo/python-list