If it won't be simple, it simply won't be. [Hire me, source code] by Miki Tebeka, CEO, 353Solutions

Tuesday, March 18, 2008

unique


def unique(items):
'''Remove duplicate items from a sequence, preserving order

>>> unique([1, 2, 3, 2, 1, 4, 2])
[1, 2, 3, 4]
>>> unique([2, 2, 2, 1, 1, 1])
[2, 1]
>>> unique([1, 2, 3, 4])
[1, 2, 3, 4]
>>> unique([])
[]
'''
seen = set()

def is_new(obj, seen=seen, add=seen.add):
if obj in seen:
return 0
add(obj)
return 1

return filter(is_new, items)

2 comments:

trepca said...

Why no just use this ?

unique = lambda x: x.__class__(set(x))

Miki Tebeka said...

Very clever!
However this does not preserve the order of the elements.
>>> unique = lambda x: x.__class__(set(x))
>>> unique([2,1,3,1,1])
[1, 2, 3]
>>>

Blog Archive