delete duplicates in list
Martin Chilvers
martin at enthought.com
Fri Oct 31 10:05:39 EST 2003
More information about the Python-list mailing list
Fri Oct 31 10:05:39 EST 2003
- Previous message (by thread): delete duplicates in list
- Next message (by thread): delete duplicates in list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Maybe I'm just old-school, and it won't win any prizes for speed but... >>> a = [1, 3, 2, 3, 4, 2, 1, 4, 3, 2, 1, 2, 4] >>> reduce(lambda l, x: x not in l and l.append(x) or l, a, []) [1, 3, 2, 4] ;^) Martin > -----Original Message----- > From: python-list-bounces+martin=enthought.com at python.org > [mailto:python-list-bounces+martin=enthought.com at python.org] > On Behalf Of Bengt Richter > Sent: Thursday, October 30, 2003 5:26 PM > To: python-list at python.org > Subject: Re: delete duplicates in list > > > On Wed, 29 Oct 2003 22:02:08 +0100, christof hoeke > <csad7 at yahoo.com> wrote: > > >hello, > >this must have come up before, so i am already sorry for asking but a > >quick googling did not give me any answer. > > > >i have a list from which i want a simpler list without the > duplicates > >an easy but somehow contrived solution would be > > > > >>> a = [1, 2, 2, 3] > > >>> d = {}.fromkeys(a) > > >>> b = d.keys() > > >>> print b > >[1, 2, 3] > > > >there should be an easier or more intuitive solution, maybe > with a list > >comprehension= > > > >somthing like > > > > >>> b = [x for x in a if x not in b] > > >>> print b > >[] > > > >does not work though. > > > If you want to replace the original list without a temporary > new list, and your original is sorted (or you don't mind > having it sorted), then you could do the following (not > tested beyond what you see ;-), which as an extra benefit > doesn't require hashability: > > >>> def elimdups(thelist): > ... thelist.sort() # remove if you just want to > eliminate adjacent duplicates > ... i = 0 > ... for item in thelist: > ... if item==thelist[i]: continue > ... i += 1 > ... thelist[i] = item > ... del thelist[i+1:] > ... > >>> a = [1, 2, 2, 3] > >>> elimdups(a) > >>> a > [1, 2, 3] > >>> a=[] > >>> elimdups(a) > >>> a > [] > >>> a = [123] > >>> elimdups(a) > >>> a > [123] > >>> a = ['a', ['b', 2], ['c',3], ['b',2], 'd'] > >>> a > ['a', ['b', 2], ['c', 3], ['b', 2], 'd'] > >>> elimdups(a) > >>> a > [['b', 2], ['c', 3], 'a', 'd'] > >>> a = list('deaacbb') > >>> elimdups(a) > >>> a > ['a', 'b', 'c', 'd', 'e'] > > Not sure how this was decided, but that's the way it works: > >>> 'a' > ['b', 2] > True > > Hm, it would have been nicer to have an optional sort flag as > a second parameter. Oh, well, another time... > > Regards, > Bengt Richter > -- > http://mail.python.org/mailman/listinfo/python-list >
- Previous message (by thread): delete duplicates in list
- Next message (by thread): delete duplicates in list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list