On Fri, Feb 04, 2005 at 12:43:37PM -0500, Alan McIntyre wrote: > Hi all, > > I have a list of items that has contiguous repetitions of values, but > the number and location of the repetitions is not important, so I just > need to strip them out. For example, if my original list is > [0,0,1,1,1,2,2,3,3,3,2,2,2,4,4,4,5], I want to end up with [0,1,2,3,2,4,5]. > > Here is the way I'm doing this now: > > def straightforward_collapse(myList): > collapsed = [myList[0]] > for n in myList[1:]: > if n != collapsed[-1]: > collapsed.append(n) > > return collapsed > > Is there an elegant way to do this, or should I just stick with the code > above? > If you are using python2.4,
>>> import itertools as it >>> [x[0] for (x) in it.groupby([0,0,1,1,1,2,2,3,3,3,2,2,2,4,4,4,5])] [0, 1, 2, 3, 2, 4, 5] >>> Since this is 2.4 you could also return a generator expression. >>> def iter_collapse(myList): ... return (x[0] for (x) in it.groupby([0,0,1,1,1,2,2,3,3,3,2,2,2,4,4,4,5])) ... >>> i = iter_collapse([0,0,1,1,1,2,2,3,3,3,2,2,2,4,4,4,5]) >>> i <generator object at 0xb7df6b2c> >>> list(i) [0, 1, 2, 3, 2, 4, 5] >>> -Jack -- http://mail.python.org/mailman/listinfo/python-list