Unique Elements in a List
Michael J. Fromberger
Michael.J.Fromberger at Clothing.Dartmouth.EDU
Mon May 9 20:07:27 EDT 2005
In article <1115676903.432187.294910 at z14g2000cwz.googlegroups.com>,
"superprad at gmail.com" <superprad at gmail.com> wrote:
> Is there an easy way to grab the Unique elements from a list?
> For Example:
> data = [0.1,0.5,0.6,0.4,0.1,0.5,0.6,0.9]
>
> what I am looking for is the unique elements 0.4 and 0.9 with their
> index from the list.
> Probably something like a Hash Table approach!!
> I would like to get this done without unnecessary overhead.And the list
> could be essentially anything strings,floats,int etc...
>
> Or is it already avaliable as an attr to a list or an array?
> I dont remember seeing anything like that.
>
>From your comments downthread, it seems you want to find those elements
of the input sequence which occur exactly once, and return not only
these elements, but also their positions.
One reasonable solution might be as follows:
def unique_elts(seq):
elts = {}
for pos, elt in enumerate(seq):
elts.setdefault(elt, []).append(pos)
return [ (x, p[0]) for (x, p) in elts.iteritems()
if len(p) == 1 ]
This returns a list of tuples of the form (x, pos), where x is an
element of seq that occurs exactly once, and pos is its index in the
original sequence. This implementation traverses the input sequence
exactly once, and requires storage proportional to the length of the
input.
-M
--
Michael J. Fromberger | Lecturer, Dept. of Computer Science
http://www.dartmouth.edu/~sting/ | Dartmouth College, Hanover, NH, USA
More information about the Python-list
mailing list