Rajanikanth Jammalamadaka: > Is there a functional way to do this? > I have an array [0,1,2,3,0,1,2,2,3] and I want the first chunk of > non-decreasing values from this array (eg: In this case I want > [0,1,2,3])
In Python sometimes the best way to write the code isn't functional, this is readable code: s = [3,1,2,3,0,1,2,2,3,3,2] it = iter(s) prec = it.next() #fix this if it can be empty groups = [[prec]] for x in it: if x < prec: groups.append([]) groups[-1].append(x) prec = x print groups Output: [[3], [1, 2, 3], [0, 1, 2, 2, 3, 3], [2]] If you want more fancy code you may use something like this: class Infinite: def __cmp__(self, other): return 0 if isinstance(other, Infinite) else 1 infinite = Infinite() it = iter(s) prec = infinite groups = [] for x in it: if x < prec: groups.append([]) groups[-1].append(x) prec = x print groups If you really want functional code you may try to use groupby(). bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list