Luke Paireepinart wrote: > How about this :D > > # Remove duplicates from a list: >>>> L = [1,2,2,3,3,3] >>>> [x for x in L if x not in locals()['_[1]'].__self__] > [1,2,3] > > [accessed at > http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/204297 ]
The problems with this are, it is not portable, even across versions of CPython (try the above in Python 2.4) and it will have poor performance for lists with many unique entries because it searches the entire list for each addition. These recipes are interesting, particularly the discussion for the first one: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52560 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/438599 Raymond Hettinger (who should know, he is a Python performance guru) said in 2002 that this is the fastest order-preserving method: def uniq(alist) # Fastest order preserving set = {} return [set.setdefault(e,e) for e in alist if e not in set] Perhaps there is now a faster method using a real set, but maybe not because set doesn't have a method that adds to the set and returns the value. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor