finding items that occur more than once in a list

sturlamolden sturlamolden at yahoo.no
Wed Mar 19 00:08:04 CET 2008


On 18 Mar, 23:45, Arnaud Delobelle <arno... at googlemail.com> wrote:

> > def nonunique(lst):
> >    slst = sorted(lst)
> >    dups = [s[0] for s in
> >         filter(lambda t : t[0] == t[1], zip(slst[:-1],slst[1:]))]
> >    return [dups[0]] + [s[1] for s in
> >         filter(lambda t : t[0] != t[1], zip(dups[:-1],dups[1:]))]
>
> Argh!  What's wrong with something like:
>
> def duplicates(l):
>     i = j = object()
>     for k in sorted(l):
>         if i != j == k: yield k
>         i, j = j, k


Nice, and more readable. But I'd use Paul Robin's solution. It is O(N)
as opposed to ours which are O(N log N).









More information about the Python-list mailing list